Metóda Map.computeIfAbsent ()

1. Prehľad

V tomto výučbe sa v krátkosti pozrieme na novú predvolenú metódu computeIfAbsent z Mapa rozhranie zavedené v prostredí Java 8.

Konkrétne sa pozrieme na jeho podpis, použitie a na to, ako zvláda rôzne prípady.

2. Map.computeIfAbsent Metóda

Začnime pohľadom na podpis computeIfAbsent:

predvolená hodnota V computeIfAbsent (klávesa K, funkcia mapovania funkcií)

The computeIfAbsent metóda má dva parametre. Prvým parametrom je kľúč a druhým parametrom je mappingFunction. Je dôležité vedieť, že funkcia mapovania sa volá iba v prípade, že mapovanie nie je k dispozícii.

2.1. Kľúč súvisiaci s nenulovou hodnotou

Najskôr skontroluje, či kľúč sa nachádza na mape. Ak kľúč je prítomný a hodnota nenulovej hodnoty súvisí s kľúčom, potom túto hodnotu vráti:

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

Ako vidíme, kľúč „John“ ak má prítomné nenulové mapovanie, vráti hodnotu 5. Ak by sa použila naša mapovacia funkcia, čakali by sme, že funkcia vráti dĺžku 4.

2.2. Použitie funkcie mapovania na výpočet hodnoty

Ďalej, ak kľúč nie je prítomný na mape alebo nulová hodnota súvisí s kľúč, potom sa pokúsi vypočítať hodnotu pomocou daného mappingFunction. Taktiež zadá vypočítanú hodnotu do mapy, pokiaľ vypočítaná hodnota nie je nulová.

Poďme sa pozrieť na využitie mappingFunction v computeIfAbsent metóda:

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

Keďže kľúč „John“ nie je k dispozícii, vypočítava hodnotu odovzdaním kľúč ako parameter k mappingFunction.

2.3. Vráti sa funkcia mapovania nulový

Tiež, ak mappingFunction vracia nulový, mapa nezaznamenáva žiadne mapovanie:

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

2.4. Funkcia mapovania vyvolá výnimku

Nakoniec, ak mappingFunction vyvolá nekontrolovanú výnimku, potom sa výnimka znova vyvolá a mapa nezaznamená žiadne mapovanie:

@Test (očakáva sa = RuntimeException.class) public void whenMappingFunctionThrowsException_thenExceptionIsRethrown () {Map stringLength = new HashMap (); stringLength.computeIfAbsent ("John", s -> {hodiť novú RuntimeException ();}); }

Vidíme, že mappingFunction hodí a RuntimeException, ktorá sa šíri späť do computeIfAbsent metóda.

3. Záver

V tomto rýchlom článku sme sa pozreli na computeIfAbsent metóda, jej podpis a použitie. Nakoniec sme videli, ako zvláda rôzne prípady.

Všetky tieto ukážky kódu sú ako vždy k dispozícii na GitHub.


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