如何在java中的另一个地图内部对地图的值进行求和?

时间:2017-05-20 11:36:10

标签: java hashmap

我有这个地图里面有另一个HashMap。如何对内部地图的值进行求和并进行比较呢?

地图尺寸也可以更改。所以我正在寻找适用于各种尺寸地图的解决方案。

{Team2={Alex=0, Tom=20}, Team1={John=0, Ammy=9, Monica=1}, Team3{...}, ...}

团队价值观 - > {Alex = 0,Tom = 20},{John = 0,Ammy = 9,Monica = 1} ......

这些值的值是 - > {0,20},{0,9,1} ...

我只想总结这些价值并找到最大值。

 for(int i = 0 ; i < teamNameList.size() ; i++){
                int sum = sum + teams.get(teamNameList.get(i)).values().values();
            }

2 个答案:

答案 0 :(得分:2)

如果您使用的是Java 8,则可以使用:

long sum = map.values().stream()
        .mapToInt(i -> i.values().stream()
        .mapToInt(m -> m).sum()).sum();

答案 1 :(得分:0)

您可以stream通过条目,计算每个条目的总数,并将条目收集回新的map,例如:

Map<String, Map<String, Integer>> map = new HashMap<>();
Map<String, Integer> data = new HashMap<>();
data.put("Alex", 10);
data.put("Tom", 20);
data.put("John", 30);
map.put("team1", data);

Map<String, Integer> totals = map.entrySet()
    .stream()
    .map(e -> new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue().entrySet().stream().mapToInt(Map.Entry::getValue).sum()))
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

System.out.println(totals);