2 HashMap miteinander vergleichen

Hallo WWW,

ich bín nicht der größte was JAVA angeht, aber im Moment hänge ich so sehr, das nur Ihr mir weiterhelfen könnt:smile:

Ich habe derzeit 2 Hashmap:
Beide haben den Typ <Integer Integer>

Beide haben 4 Schlüssel und 4 Werte.

Die Schlüssel sind in beiden Hashmap identisch.

Bsp:
HM 1                  HM 2
Schl   Wert         Schl   Wert
10       1000        10      500
20        2000        20     2500

Ich will diese nun miteinander vergleichen und es soll eine dritte HashMap enstehen in der immer der NIEDRIGERE Wert mit Schlüssel steht.

Ich habe schon viel probiert mit Sortierung von Collections und Tree Maps. Aber da ich mich mit HashMap nicht auskenne brauche ich einen Experten.

Hoffe Ihr könnt mir weiterhelfen.

Viele Grüße
Red

Hallo,

hole dir mit entrySet() alle Einträge aus der einen HashMap. Iteriere über diese Menge und hole dabei jeweils den Wert zum entsprechenden Schlüssel aus der anderen Map. Vergleiche die beiden Werte und füge den niedrigeren zusammen mit dem Schlüssel in eine neue Map ein.
Als Pseudo-Java-Code:

einträge = map1.entrySet()
for(eintrag : einträge)
{
 wert1 = eintrag.getValue()
 wert2 = map2.get(eintrag.getKey())
 map3.put(eintrag.getValue(), Math.min(wert1, wert2)
}

Nico

Hmmm okay. Ich verstehe es sogar.
Iterator kenn ich nur bedingt:smile:

Aber ich werde es heute Abend mal versuchen. Ich würde morgen nochmal Antworten und schonmal vielen Dank sagen für die Mühe.

G Red

Hallo Nico,

kannst du mir evtl. weiterhelfen.

Ich habe es nicht hinbekommen. Ich bekomme es mit deinem Teilcode nicht nachgebaut.

Z.B.:
Welchen Typ hat den Eintrag?
Wo kommt jetzt eintrag / einträge her?

Wo ist der Iterator?

Hoffe du kannst nochmal schreiben:smile:

Hallo,

wenn du keine Entwicklungsumgebung hast, die dir weiterhilft, lohnt sich ein Blick in die Java-Dokumentation zur HashMap.
Dort wird schon mal der Typ des entrySets deutlich, nämlich in deinem Fall Set>. Also:

Set\> eintraege = map1.entrySet();

Folgen wir der Dokumentation weiter zum Set. Dort sehen wir, dass dieses das Interface Iterable implementiert. Das heißt, dass unsere Laufvariable vom Typ E, also konkret Map.Entry sein muss:

for(Map.Entry eintrag : eintraege)

Aus der Dokumentation für Map.Entry wird ersichtlich, dass wert1 vom Typ V, also Integer sein muss. Entsprechendes gilt für wert2.

Integer wert1 = ...;
Integer wert2 = ...;

Die letzte Zeile ist schon fertiges Java. Es fehlt nur eine schließende Klammer und ein Semikolon :wink:

Nico

1 Like

Und es funktioniert :smile:

*VIELEN VIELEN DANK NICO*