我想要按其类型分组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();
有没有办法可以直接获取生成的地图的价值集,而不是生成地图,然后使用values()
从中提取价值集?
答案 0 :(得分:3)
在内部,你仍然需要生成这样的地图。可以通过以下方式创建自定义收集器:
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()
调用合并到收集器中即可。