2017-05-20 2 views
0

Ich habe diese Karte, die eine andere HashMap enthält. Wie kann ich die Werte der inneren Karten summieren und vergleichen?Wie summiere ich die Werte einer Karte in einer anderen Karte in Java?

Auch die Kartengröße veränderbar. Also ich suche nach einer Lösung, die jede Größe der Karten funktioniert.

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

Werte von Teams -> {Alex = 0, Tom = 20}, {John = 0, Ammy = 9, Monica = 1} ...

Werte dieser Werte ist - > {0,20}, {0,9,1} ...

Ich möchte nur diese Werte summieren und die größte finden.

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

Bitte zeigen Sie, was Sie bisher versucht haben –

Antwort

1

Wenn Sie 8 Java verwenden, können Sie verwenden:

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

was soll ich statt i und m schreiben? –

+0

was meinst du @MansurMuazEkici? –

0

Sie können stream durch Einträge, berechnen insgesamt für jeden Eintrag und sammeln Sie die Einträge wieder in eine neue map, zB:

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); 
Verwandte Themen