我有一个场景,我需要一个包含重复键和值的映射。我首先创建了一个列表,然后使用关联将它们转换为 map ,但是没有考虑重复问题。这是我的实现:
class State(private val startStatus: Status, private val expectedStatus: Status) {
companion object StatusList {
val listStatuses = listOf(
State(Status.A, Status.B),
State(Status.B, Status.A),
State(Status.B, Status.C),
State(Status.C, Status.B),
State(Status.C, Status.E),
State(Status.C, Status.D),
State(Status.D, Status.B),
State(Status.E, Status.C),
State(Status.E, Status.B)
)
open fun mapStatuses(): Map<Status, Collection<Status>> {
return listStatuses.associateBy(
keySelector = { key -> key.expectedStatus },
valueTransform = State::startStatus)
}
}
}
我正在努力在 Kotlin 中找到一个可以让我处理重复项的 Multimap。你能帮忙吗?
谢谢
最佳答案
简而言之,Kotlin 中没有多重映射。
多重映射将允许多个具有不同值的等效键 - 这可以通过唯一键和与给定键关联的值集合来实现,而不是查看具有等效键的键值对集合。
因此,您可以使用groupBy()
:
data class Record(val id: Int, val name: String)
fun main() {
val records = listOf(
Record(1, "hello"),
Record(1, "there"),
Record(2, "general"),
Record(2, "kenobi")
)
val mapped = records.groupBy({ it.id }, { it.name })
for (entry in mapped) {
println("${entry.key} -> ${entry.value.joinToString()}")
}
}
这里我使用 groupBy
和键的投影(即 Record
的 id
)和值的投影(即Record
的名称
)。与您的 State
和 Status
非常相似。
关于kotlin - map : Kotlin 中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62835436/