使用java stream api时,有没有办法使用Collectors.groupingBy并添加原始Collection? 所以当我使用类似这样的代码时:
interface SomeObject {
public String getA();
public String getB();
}
Collection<SomeObject> obj;
Map<String,List<SomeObject>> grouped = obj.stream()
.collect(groupingBy(SomeObject::getA, "ALL A"));
我可以指定一个String值,其中整个原始Collection也被放入Map中。 如果我只使用一个groupingBy:
,这将很容易做到grouped.put("ALL A",obj.stream().collect(toList()));
但对于几个链式的:
Map<String,Map<String,List<SomeObject>>> chaingrouped = obj.stream()
.collect(groupingBy(SomeObject::getA, "ALL A",
groupingBy(SomeObject::getB, "ALL B")));
当我需要拥有原始Collection的所有可能分区时,这对以后的使用非常有用:
chaingrouped.entrySet().forEach(entryA -> {
entryA.entrySet().forEach(entryB -> {
// this now has the original Collection in full
// partitioned by getB additionally to the standard groupingBy
// which would only have the getA partitioned again partitioned by getB
});
});
对于国家/城市/地区示例: 我希望按国家/地区对国家/地区进行分组,然后按地区分组,然后对每个分组的supset进行一些统计。 例如,我可以看一下每个街区的街道数量。 但我还希望有一个“全部”的国家可供选择,仅按城市和地区划分。或者选择一个特定的国家/地区,使用“任何城市”&#39;并再次按地区划分此子集。等
[编辑澄清]