2

我有一个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()?

4

1 回答 1

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()调用合并到收集器中。

于 2015-06-02T12:38:18.517 回答