在Kotlin中创建属性到对象的映射
考虑以下几点:在Kotlin中创建属性到对象的映射,kotlin,Kotlin,考虑以下几点: data class Thing(val name: String, val attributes: List<String>) 数据类事物(val名称:字符串,val属性:列表) 给定一个列表我想创建一个属性字符串到列表的映射。大体上,事物将按其各自的属性进行分组 首先想到的是flatMap和associateBy的组合,但它们如何组合在一起还不清楚 如果您能提供物品清单,我们将不胜感激: val elements = listOf( Thing("Fi
data class Thing(val name: String, val attributes: List<String>)
数据类事物(val名称:字符串,val属性:列表)
给定一个列表
我想创建一个属性字符串
到列表
的映射。大体上,事物将按其各自的属性进行分组
首先想到的是flatMap
和associateBy
的组合,但它们如何组合在一起还不清楚
如果您能提供
物品清单,我们将不胜感激:
val elements = listOf(
Thing("First", listOf("A", "B")),
Thing("Second", listOf("A", "B")),
Thing("Third", listOf("A"))
)
您可以使用:
您可以收集所有可用属性,然后使用associate
创建单个属性和具有相应属性的对象的对。它将生成指定的映射
val things = listOf(
Thing("first", listOf("a1", "a3")),
Thing("second", listOf("a2", "a3", "a4"))
)
val result = things
.flatMap { it.attributes }
.associate { att ->
att to things.filter { it.attributes.contains(att) }
}
结果如下:
a1=[Thing(name=first, attributes=[a1, a3])],
a3=[Thing(name=first, attributes=[a1, a3]), Thing(name=second, attributes=[a2, a3, a4])],
a2=[Thing(name=second, attributes=[a2, a3, a4])],
a4=[Thing(name=second, attributes=[a2, a3, a4])]
你有什么作为输入<代码>列表
?请添加所需的方法签名。谢谢。考虑到两种解决方案都是可行的,这看起来是最干净的。谢谢你的帮助!
val things = listOf(
Thing("first", listOf("a1", "a3")),
Thing("second", listOf("a2", "a3", "a4"))
)
val result = things
.flatMap { it.attributes }
.associate { att ->
att to things.filter { it.attributes.contains(att) }
}
a1=[Thing(name=first, attributes=[a1, a3])],
a3=[Thing(name=first, attributes=[a1, a3]), Thing(name=second, attributes=[a2, a3, a4])],
a2=[Thing(name=second, attributes=[a2, a3, a4])],
a4=[Thing(name=second, attributes=[a2, a3, a4])]