2016-06-08 3 views
0

So habe ich diese hashmap „hm“ genannt, die die folgende Ausgabe erzeugt (ANMERKUNG: dies nur eine Auswahl ist):Wie berechnet man die Summe der Werte verschiedener Hashmaps mit dem gleichen Schlüssel?

{1=35, 2=52, 3=61, 4=68, 5=68, 6=70, 7=70, 8=70, 9=70, 10=72, 11=72} 

{1=35, 2=52, 3=61, 4=68, 5=70, 6=70, 7=70, 8=68, 9=72, 10=72, 11=72} 

{1=35, 2=52, 3=61, 4=68, 5=68, 6=70, 7=70, 8=70, 9=72, 10=72, 11=72} 

Diese Ausgabe wurde mit dem folgenden Code (HINWEIS erstellt: der Rest der Klasse Code ist hier nicht) dargestellt:

private int scores; 
HashMap<Integer,Integer> hm = new HashMap<>(); 

for (int i = 0; i < fileLines.length(); i++) { 
    char character = fileLines.charAt(i); 
    this.scores = character; 
    int position = i +1; 
    hm.put(position,this.scores); 
} 
System.out.println(hm); 

Was ich zu tun versuchen, ist, all diese Hashmaps zusammen in einem hashmap mit als Wert der Summe der Werte pro Schlüssel. Ich kenne Pythons Standarddict, konnte aber kein äquivalentes Arbeitsbeispiel finden. Ich habe nach einer Antwort gesucht und die Antworten unten getroffen, aber sie lösen mein Problem nicht.

How to calculate a value for each key of a HashMap?

what java collection that provides multiple values for the same key

is there a Java equivalent of Python's defaultdict?

Die gewünschte Ausgabe wäre:

{1=105, 2=156, 3=183 , 4=204 ,5=206 ..... and so on} 

Schließlich wird die durchschnittliche pro Position (Schlüssel) berechnet werden muss, aber das ist ein Problem, das ich Ich denke, ich kann mich selbständig machen, wenn ich weiß, wie ich das oben tun soll.

EDIT: Der reale Ausgang ist viel viel größer! Denken Sie an mehr als 100 Hashmaps mit mehr als 100 Schlüsseln.

+1

zurückzukehren Was Sie von Iterieren über die Einträge aller 3 HashMaps stoppt und für jede Taste die Werte summiert? – Eran

+0

Wenn Sie wissen, die Tasten sind 1 bis 11, nur 'for' Schleife und Summe mit' get() '. Wenn Sie die Schlüssel nicht kennen, aber wissen, dass alle Karten die gleichen Schlüssel haben, iterieren Sie einfach die Schlüssel aus einer von ihnen und summieren Sie mit 'get()'. – Andreas

+0

Vielen Dank, ich werde Ihren Vorschlag versuchen! – user3309936

Antwort

3

Versuchen Sie, mit etwas wie das

public Map<Integer, Integer> combine(List<Map<Integer, Integer>> maps) { 
    Map<Integer, Integer> result = new HashMap<Integer, Integer>(); 
    for (Map<Integer, Integer> map : maps) { 
     for (Map.Entry<Integer, Integer> entry : map.entrySet()) { 
      int newValue = entry.getValue(); 
      Integer existingValue = result.get(entry.getKey()); 
      if (existingValue != null) { 
       newValue = newValue + existingValue; 
      } 
      result.put(entry.getKey(), newValue); 
     } 
    } 
    return result; 
} 

Grundsätzlich gilt:

  • Erstellen Sie eine neue Karte für das Ergebnis
  • Iterate über jede Karte
  • jedes Element nehmen und wenn bereits vorhanden im Ergebnis erhöht den Wert, wenn nicht in der Karte
  • das Ergebnis
+0

downvoted Vielen Dank für Ihre klare Erklärung! Ich kann definitiv etwas mit diesem Beispiel machen! – user3309936

+0

Sie sind willkommen –

1
newHashMap.put(key1,map1.get(key1)+map2.get(key1)+map3.get(key1)); 
+0

Aber was, wenn ich 100 hashmaps habe? das ist hier der Fall, dies ist nur ein Beispiel für ein echtes winziges Stück der Ausgabe. – user3309936

+0

Was ist key1 .... Sie sollten über alle Schlüssel jeder Karte iterieren. –

+0

Ich gebe nur ein Beispiel für eine, die Sie tun können, für alle sollten Sie Schleife schreiben. –