我有Map<String, Map <String, List<ExciseReportDataPoint>>> Data
类型的数据结构我想计算每个顶级键的List<ExciseReportDataPoint>
条目数。
我们可以将逻辑方式的hashmap视为Map<LiquorCategory, Map<LiquorBrand, List<LiquorBottles>>>
。基本上我想知道每个LiquorCategory有多少酒瓶。
答案 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();
}
}