在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])]