在嵌套的hashmap中获取集合的大小?

时间:2017-02-16 07:03:36

标签: java collections hashmap

我有Map<String, Map <String, List<ExciseReportDataPoint>>> Data类型的数据结构我想计算每个顶级键的List<ExciseReportDataPoint>条目数。

我们可以将逻辑方式的hashmap视为Map<LiquorCategory, Map<LiquorBrand, List<LiquorBottles>>>。基本上我想知道每个LiquorCategory有多少酒瓶。

3 个答案:

答案 0 :(得分:1)

您必须迭代第一级Map,然后在第二级迭代以计算所有List.size

第一种方式

Map<String, Map <String, List<Double>>> Data = new HashMap<String, Map <String, List<Double>>> ();
int somme = 0;
for(String key1 : Data.keySet()){
    somme = 0;
    for(List<Double> value2 : Data.get(key1).values()){
        somme += value2.size();
    }
    System.out.println("For "+key1+", there is "+somme+" bottles");
}

要使用它,你只需更改元素的类型(String,double with Liquor ...)

第二种方式

Data.keySet().stream().forEach(key1 -> {
            System.out.println("For " + key1 + ", there is "
                    + Data.get(key1).values().stream().mapToInt(list -> list.size()).sum() + " bottles");
        });

在这里你不必关心类型,它们没有被使用,并且它在3行中也是如此 Streams是迭代和过滤,求和,计数......的替代方法。

答案 1 :(得分:1)

Map&lt; String,Map&lt; String,List&lt; Double&gt;&gt;&gt; data = new HashMap&lt; String,Map&lt; String,ArrayList&lt; Double&gt;&gt;&gt; ();

for(Map.Entry&lt; String,HashMap&lt; String,List&lt; Double&gt;&gt;&gt; liquorCategoryEntry:data.entrySet()){

String category = liquorCategoryEntry.getKey();

int liquorBottle = 0;
for (Map.Entry<String, List<Double>> liquorBrandEntry : liquorCategoryEntry.getValue().entrySet()) {
    String brandName = liquorBrandEntry.getKey();
    liquorBottle += liquorBrandEntry.getValue().size();
    // ...
}

}

答案 2 :(得分:0)

我根据一些答案的建议编写了以下代码。这对我有用。代码如下:

for (Map.Entry<String, Map<String, List<ExciseReportDataPoint>>> entry1 : rData.entrySet()) {
     int liquorBottle = 0;
     for(List<ExciseReportDataPoint> value2 : rData.get(entry1.getKey()).values()){
         liquorBottle += value2.size();
     }
}