Map.computeIfAbsent () -metoden

1. Oversikt

I denne veiledningen ser vi kort på den nye standardmetoden computeIfAbsent av Kart grensesnitt introdusert i Java 8.

Spesielt vil vi se på signaturen, bruken og hvordan den håndterer forskjellige saker.

2. Map.computeIfAbsent Metode

La oss starte med å se på signaturen til computeIfAbsent:

standard V computeIfAbsent (K-tast, Funksjon mappingFunction)

De computeIfAbsent metoden tar to parametere. Den første parameteren er nøkkel og den andre parameteren er mappingFunction. Det er viktig å vite at kartleggingsfunksjonen kun kalles hvis kartleggingen ikke er tilstede.

2.1. Nøkkel relatert til en ikke-null verdi

For det første sjekker den om nøkkel er til stede i kartet. Hvis den nøkkel er tilstede og en ikke-null verdi er relatert til nøkkelen, så returnerer den verdien:

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

Som vi ser, nøkkel “John” har en ikke-null kartlegging, den returnerer verdien 5. Hvis kartleggingsfunksjonen vår ble brukt, forventer vi at funksjonen returnerer lengden på 4.

2.2. Bruke kartfunksjonen til å beregne verdien

Videre, hvis nøkkel ikke er tilstede i kartet eller nullverdi er relatert til nøkkel, deretter prøver den å beregne verdien ved hjelp av det gitte mappingFunction. Det legger også inn den beregnede verdien på kartet med mindre den beregnede verdien er null.

La oss ta en titt på bruken av mappingFunction i computeIfAbsent metode:

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

Siden nøkkel “John” ikke er til stede, beregner den verdien ved å passere nøkkel som en parameter til mappingFunction.

2.3. Kartleggingsfunksjon returnerer null

Også, hvis mappingFunction returnerer null, kartet registrerer ingen kartlegging:

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

2.4. Kartleggingsfunksjon kaster et unntak

Til slutt, hvis mappingFunction kaster et ukontrollert unntak, så kastes unntaket på nytt, og kartet registrerer ingen kartlegging:

@Test (forventet = RuntimeException.class) offentlig ugyldig nårMappingFunctionThrowsException_thenExceptionIsRethrown () {Map stringLength = new HashMap (); stringLength.computeIfAbsent ("John", s -> {throw new RuntimeException ();}); }

Vi ser at den mappingFunction kaster en RuntimeException, som forplantes tilbake til computeIfAbsent metode.

3. Konklusjon

I denne raske artikkelen så vi på computeIfAbsent metoden, signaturen og bruken. Til slutt så vi hvordan den håndterer forskjellige saker.

Som alltid er alle disse kodeeksemplene tilgjengelige på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found