我正在寻找一种方法来在Kotlin中对列表的元素进行分组,使一个元素可以驻留在多个结果组中.

假设列表的元素如下所示:

data class Member (
    val name: String,
    val roles: List<String> = mutableListOf()
)

我想要做的是:

listOf(
  Member(name = "Name One", roles = listOf("A", "B")),
  Member(name = "Name Two", roles = listOf("A", "C"))
).groupBy{ it.roles }

结果应该是包含对象的Map<String, List<Member>>(在本例中简化为名称):

Key Value
A ["Name One", "Name Two"]
B ["Name One"]
C ["Name Two"]

这在Kotlin标准库中是可能的,还是我必须自己实现它? 我只是想确认一下:问题是"已经有什么了吗?"当然,我首先阅读了所有文档,但我不确定是否遗漏了什么.

我明确地不是要求定制实现.

推荐答案

我认为没有groupBy的变体会有这种效果,因为从概念上讲,它是关于将可迭代/集合拆分成不同的组,所以我猜一个元素不可能最终出现在多个组中.

即使是Grouping抽象本身也假设存在一个键 Select 器,该 Select 器 for each 元素提供一个键,这使得它与您的用例不兼容.

您可能不得不实现您自己的.

Kotlin相关问答推荐

Spring Boot Bean验证器未触发

我如何测试一个可组合组件没有显示,但如果它不存在也接受?

如果启用了Flyway迁移,则不能具有配置属性';datources.default.架构-生成

如何创建一个空的kotlin工作?

用Quarkus和Reactor重写异步过滤器中的数据流

有没有办法在 jetpack compose 中将 TextField 密码点图标增加得更大?

Kotlin 接口类型参数

可以在没有导入声明的情况下调用 Kotlin 扩展函数吗?

Kotlin 协程按顺序执行,但仅在生产机器上执行

当 func 重载时,kotlin 如何确定调用哪个 func?

如何使用函数类型或 lambdas 作为 Kotlin 上下文接收器的类型?

为什么 KFunction2 在 Kotlin 中不是可表示类型?

如何使用 Either monad 并避免嵌套 flatMap

Kotlin 无法找到或加载主类

Kotlin中的下划线名称是为什么保留的?

Spring Boot:更改属性占位符符号

如何在Kotlin中使方法param可变?

kotlin中密封类和密封接口的区别是什么

Kotlin中对象和数据类的区别是什么?

Kotlin 中的填充字符串