对于这种情况,是否有“groupBy”的替代方案?

时间:2020-12-22 11:57:16

标签: kotlin functional-programming

我有一个 items 的映射,键是项目标识符,值是 Item 对象。

每个 Item 对象都具有 id(字符串标识符)和 container(它所属的容器)等属性。 Container 也是一个具有许多属性的对象,但这里只需要 id

我想获取所有容器标识符的列表(不重复)

val containersIds : Set<String> = items.values.groupBy { item -> items.getValue(item.id).container.id }.keys

它可以完成这项工作,但也许除了使用 groupBykeys 之外还有其他用途。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您只想要每个项目的容器的 ID,不要重复?

items.values().map { it.container.id }.distinct()

或者因为您无论如何都想要Set,所以您可以免费获得唯一性!

items.values().map { it.container.id }.toSet()

或者跳过 values 列表,直接处理条目

items.map { (_, item) -> item.container.id }.toSet()