我有一个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/