Map.computeIfAbsent () -metoden

1. Oversigt

I denne vejledning ser vi kort på den nye standardmetode ComputeIfAbsent af Kort interface introduceret i Java 8.

Specifikt vil vi se på signaturen, brugen og hvordan den håndterer forskellige sager.

2. Map.computeIfAbsent Metode

Lad os starte med at se på underskriften af ComputeIfAbsent:

standard V computeIfAbsent (K-tast, FunktionsmappingFunktion)

Det ComputeIfAbsent metode tager to parametre. Den første parameter er nøgle og den anden parameter er mappingFunction. Det er vigtigt at vide, at kortfunktionen kun kaldes, hvis kortlægningen ikke er til stede.

2.1. Nøgle relateret til en ikke-nul værdi

For det første kontrollerer den, om nøgle er til stede på kortet. Hvis den nøgle er til stede, og en ikke-nul-værdi er relateret til nøglen, så returnerer den værdien:

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

Som vi ser, nøgle “John” har en ikke-nul kortlægning til stede, returnerer den værdien 5. Hvis vores kortlægningsfunktion blev brugt, forventer vi, at funktionen returnerer længden på 4.

2.2. Brug af kortfunktionen til at beregne værdien

Desuden, hvis nøgle ikke er til stede på kortet, eller nullværdien er relateret til nøgle, derefter forsøger den at beregne værdien ved hjælp af det givne mappingFunction. Det indtaster også den beregnede værdi på kortet, medmindre den beregnede værdi er nul.

Lad os se på brugen af mappingFunction i ComputeIfAbsent metode:

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

Siden den nøgle “John” ikke er til stede, beregner den værdien ved at passere nøgle som en parameter til mappingFunction.

2.3. Kortlægningsfunktion vender tilbage nul

Også, hvis mappingFunction vender tilbage nul, kortet registrerer ingen kortlægning:

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

2.4. Kortlægningsfunktion kaster en undtagelse

Endelig, hvis den mappingFunction kaster en ukontrolleret undtagelse, så kastes undtagelsen igen, og kortet registrerer ingen kortlægning:

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

Vi ser, at mappingFunction kaster en RuntimeException, der formerer sig tilbage til ComputeIfAbsent metode.

3. Konklusion

I denne hurtige artikel kiggede vi på ComputeIfAbsent metode, dens signatur og dens anvendelse. Endelig så vi, hvordan det håndterer forskellige sager.

Som altid er alle disse kodeeksempler tilgængelige på GitHub.