Int in einer Hashmap erhöhen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Z.B. so (das Wort heißt "stamina", nicht "stermina"):

staminaPlayer.merge(p.getName(), 1, Integer::sum);

Für 1 natürlich den gewünschten Wert einsetzen. Das Schöne an diesem Einzeiler ist, dass er auch zuverlässig funktioniert wenn der Wert noch gar nicht gesetzt ist: ist der Wert nicht gesetzt, wird 1 reingeschrieben. Ist er schon gesetzt, wird die gegebene Funktion (in diesem Fall Integer::sum) mit dem bestehenden Wert und 1 angewendet und das Resultat reingeschrieben.

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html#merge(K,V,java.util.function.BiFunction)

alfredo153  06.12.2020, 15:38

Und so nebenbei: du solltest statt mit HashMap stets mit dem Map-Interface arbeiten und kannst die Instanziierung deiner Map spürbar vereinfachen. Deine Java-Entwicklungsumgebung wird dich aber hoffentlich darauf hinweisen.

Map<String, Integer> staminaPlayer = new HashMap<>();
0
orochi02  08.12.2020, 23:28
@alfredo153

wenn du mit vanilla eclipse arbeitest wirst du nicht drauf hingewiesen

0
AureumApes 
Fragesteller
 06.12.2020, 17:58

Danke!!!

Funktioniert das genauso mit subtrahieren?

0
alfredo153  06.12.2020, 19:44
@AureumApes

Im Prinzip ja, du addierst halt einen negativen Wert oder machst es so:

staminaPlayer.computeIfPresent(p.getName(), (k, v) -> v - 1);
0