De methode Map.computeIfAbsent ()

1. Overzicht

In deze tutorial kijken we kort naar de nieuwe standaardmethode computeIfAbsent van de Kaart interface geïntroduceerd in Java 8.

In het bijzonder zullen we kijken naar de handtekening, het gebruik en hoe het verschillende gevallen behandelt.

2. Map.computeIfAbsent Methode

Laten we beginnen met te kijken naar de handtekening van computeIfAbsent:

standaard V computeIfAbsent (K-toets, Function mappingFunction)

De computeIfAbsent methode heeft twee parameters. De eerste parameter is de sleutel en de tweede parameter is de mappingFunctie. Het is belangrijk om te weten dat de mapping-functie alleen wordt aangeroepen als de mapping niet aanwezig is.

2.1. Sleutel gerelateerd aan een niet-nulwaarde

Ten eerste controleert het of het sleutel is aanwezig op de kaart. Als het sleutel aanwezig is en een niet-null-waarde is gerelateerd aan de sleutel, dan retourneert het die waarde:

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

Zoals we zien, is de sleutel "John" als er een niet-null-mapping aanwezig is, wordt de waarde 5 geretourneerd. Als onze mapping-functie werd gebruikt, zouden we verwachten dat de functie de lengte van 4 retourneert.

2.2. De Mapping-functie gebruiken om de waarde te berekenen

Bovendien, als het sleutel is niet aanwezig in de kaart of de null-waarde is gerelateerd aan de sleutel, dan probeert het de waarde te berekenen met behulp van het opgegeven mappingFunctie. Het voert ook de berekende waarde in de kaart in, tenzij de berekende waarde nul is.

Laten we eens kijken naar het gebruik van de mappingFunctie in de computeIfAbsent methode:

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

Sinds de sleutel "John" niet aanwezig is, berekent het de waarde door de sleutel als parameter voor de mappingFunctie.

2.3. Toewijzingsfunctie keert terug nul

Ook als het mappingFunctie geeft terug nul, registreert de kaart geen mapping:

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

2.4. Toewijzingsfunctie werpt een uitzondering op

Ten slotte, als het mappingFunctie gooit een ongecontroleerde uitzondering, dan wordt de uitzondering opnieuw gegenereerd, en de kaart registreert geen toewijzing:

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

We zien dat de mappingFunctie gooit een RuntimeException, die zich voortplant naar de computeIfAbsent methode.

3. Conclusie

In dit korte artikel hebben we gekeken naar de computeIfAbsent methode, de handtekening en het gebruik ervan. Ten slotte hebben we gezien hoe het verschillende zaken behandelt.

Zoals altijd zijn al deze codevoorbeelden beschikbaar op GitHub.