java - 使用 Collectors.groupingBy() 时获取 map 的值集

标签 java java-8 grouping collectors

我有一个Collection<A>我想按其类型进行分组。我可以通过 getType 获取 A 的类型方法。结果应为 Collection<Collection<A>> 类型。例如:
输入:[A1 ,A2, A3, A1, A3, A4] (A1 是类型“1”的对象,依此类推)
输出:[[A1, A1], [A2], [A3, A3], [A4]]

这是我写的: listOfAs.stream().collect(Collectors.groupingBy(SomeClass::getType)).values();

有没有一种方法可以直接获取生成的 map 的值集,而不是生成 map 然后使用values()从中提取值集?

最佳答案

那么在内部你仍然需要生成这样的 map 。不过,可以创建自定义收集器:

public static <T, K> 
Collector<T, ?, Collection<List<T>>> groups(Function<? super T, ? extends K> classifier) {
    return Collectors.collectingAndThen(Collectors.groupingBy(classifier), Map::values);
}

所以你可以这样使用它:

Collection<List<SomeClass>> result = listOfAs.stream().collect(groups(SomeClass::getType));

请注意,在内部它与您的解决方案没有太大区别。您只需将 values() 调用合并到收集器中即可。

关于java - 使用 Collectors.groupingBy() 时获取 map 的值集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30595995/

相关文章:

java - FloatingActionButton 与 RecyclerView 中的 CardView 重叠

java - 使用 Java Streams 返回单词出现的句子计数和列表

Grails clean 命令抛出空指针异常

python - 在这个算法中使用计数排序有什么好处?

Java - 此方法是多线程的吗?

java - 如何在MVC流程中使用模型

java - Kafka Consumer不消费java中的所有记录

java - 从 Java 8 中的方法返回 Lambda?

javascript - 在 Javascript 中根据用户对对象进行分组

sql - 使用 SQL 分组时计算行之间的差异