Die Map.computeIfAbsent () -Methode

1. Übersicht

In diesem Tutorial werden wir uns kurz mit der neuen Standardmethode computeIfAbsent der in Java 8 eingeführten Map- Schnittstelle befassen .

Insbesondere werden wir uns die Signatur, die Verwendung und die Behandlung verschiedener Fälle ansehen.

2. Map.computeIfAbsent- Methode

Schauen wir uns zunächst die Signatur von computeIfAbsent an :

default V computeIfAbsent(K key, Function mappingFunction)

Die computeIfAbsent- Methode akzeptiert zwei Parameter. Der erste Parameter ist der Schlüssel und der zweite Parameter ist die MappingFunction. Es ist wichtig zu wissen, dass die Zuordnungsfunktion nur aufgerufen wird, wenn die Zuordnung nicht vorhanden ist.

2.1. Schlüssel in Bezug auf einen Wert ungleich Null

Zunächst wird geprüft, ob der Schlüssel in der Karte vorhanden ist. Wenn der Schlüssel vorhanden ist und ein Wert ungleich Null mit dem Schlüssel verknüpft ist, gibt er diesen Wert zurück:

Map stringLength = new HashMap(); stringLength.put("John", 5); assertEquals((long)stringLength.computeIfAbsent("John", s -> s.length()), 5);

Wie wir sehen, ist für den Schlüssel „John“ eine Nicht-Null-Zuordnung vorhanden. Er gibt den Wert 5 zurück. Wenn unsere Zuordnungsfunktion verwendet würde, würden wir erwarten, dass die Funktion die Länge 4 zurückgibt.

2.2. Verwenden der Zuordnungsfunktion zum Berechnen des Werts

Wenn der Schlüssel nicht in der Zuordnung vorhanden ist oder der Nullwert mit dem Schlüssel verknüpft ist , wird versucht, den Wert mithilfe der angegebenen Zuordnungsfunktion zu berechnen . Außerdem wird der berechnete Wert in die Karte eingegeben, sofern der berechnete Wert nicht null ist.

Lassen Sie uns einen Blick auf die Verwendung der MappingFunction in der computeIfAbsent- Methode werfen :

Map stringLength = new HashMap(); assertEquals((long)stringLength.computeIfAbsent("John", s -> s.length()), 4); assertEquals((long)stringLength.get("John"), 4);

Da der Schlüssel „John“ nicht vorhanden ist, berechnet er den Wert, indem er den Schlüssel als Parameter an die MappingFunction übergibt .

2.3. Zuordnungsfunktion Gibt null zurück

Wenn die MappingFunction null zurückgibt, zeichnet die Map keine Zuordnung auf:

Map stringLength = new HashMap(); assertEquals(stringLength.computeIfAbsent("John", s -> null), null); assertNull(stringLength.get("John"));

2.4. Zuordnungsfunktion löst eine Ausnahme aus

Wenn die MappingFunction eine ungeprüfte Ausnahme auslöst , wird die Ausnahme erneut ausgelöst und die Map zeichnet keine Zuordnung auf:

@Test(expected = RuntimeException.class) public void whenMappingFunctionThrowsException_thenExceptionIsRethrown() { Map stringLength = new HashMap(); stringLength.computeIfAbsent("John", s -> { throw new RuntimeException(); }); }

Wir sehen, dass die MappingFunction eine RuntimeException auslöst , die an die computeIfAbsent- Methode zurückgegeben wird.

3. Fazit

In diesem kurzen Artikel haben wir uns die computeIfAbsent- Methode, ihre Signatur und ihre Verwendung angesehen. Schließlich haben wir gesehen, wie es mit verschiedenen Fällen umgeht.

Wie immer sind alle diese Codebeispiele auf GitHub verfügbar.