Java Stream分组同样保留原始集合

时间:2017-11-07 10:54:35

标签: java java-stream

使用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;并再次按地区划分此子集。等

[编辑澄清]

0 个答案:

没有答案