A Map.computeIfAbsent () metódus
1. Áttekintés
Ebben az oktatóanyagban röviden áttekintjük az új alapértelmezett módszert computeIfAbsent a Térkép a Java 8-ban bevezetett felület.
Konkrétan megvizsgáljuk az aláírását, használatát és a különböző esetek kezelését.
2. Map.computeIfAbsent Módszer
Kezdjük azzal, hogy megnézzük a computeIfAbsent:
alapértelmezett V computeIfAbsent (K kulcs, Function mappingFunction)
A computeIfAbsent A módszer két paramétert vesz fel. Az első paraméter a kulcs a második paraméter pedig a mappingFunction. Fontos tudni, hogy a leképezési függvény csak akkor hívható meg, ha a leképezés nincs jelen.
2.1. Nem null értékkel kapcsolatos kulcs
Először azt ellenőrzi, hogy a kulcs jelen van a térképen. Ha a kulcs jelen van, és egy nem null érték kapcsolódik a kulcshoz, akkor azt adja vissza:
Map stringLength = new HashMap (); stringLength.put ("John", 5); assertEquals ((hosszú) stringLength.computeIfAbsent ("John", s -> s.length ()), 5);
Mint látjuk, a kulcs „John” nem null leképezés van jelen, akkor az 5. értéket adja vissza. Ha a leképezési függvényünket használnánk, akkor azt várnánk, hogy a függvény visszaadja a 4 hosszát.
2.2. Az érték kiszámításához használja a leképezési funkciót
Továbbá, ha a kulcs nem található a térképen, vagy a nullérték összefügg a kulcs, akkor megkísérli kiszámolni az értéket a megadott felhasználásával mappingFunction. Ezenkívül beírja a számított értéket a térképbe, hacsak a számított érték nem null.
Vessünk egy pillantást a mappingFunction ban,-ben computeIfAbsent módszer:
Map stringLength = new HashMap (); assertEquals ((hosszú) stringLength.computeIfAbsent ("John", s -> s.length ()), 4); assertEquals ((hosszú) stringLength.get ("John"), 4);
Mivel a kulcs „John” nincs jelen, az érték átadásával kiszámítja a kulcs paramétereként a mappingFunction.
2.3. A függvény leképezése visszatér nulla
Továbbá, ha a mappingFunction visszatér nulla, a térkép nem rögzít leképezést:
Térkép stringLength = új HashMap (); assertEquals (stringLength.computeIfAbsent ("John", s -> null), null); assertNull (stringLength.get ("John"));
2.4. A függvény leképezése kivételt dob
Végül, ha a mappingFunction dob egy ellenőrizetlen kivételt, akkor a kivétel újra dobásra kerül, és a térkép nem rögzít leképezést:
@Test (várható = RuntimeException.class) public void whenMappingFunctionThrowsException_thenExceptionIsRethrown () {Map stringLength = new HashMap (); stringLength.computeIfAbsent ("John", s -> {dobjon új RuntimeException ();}); }
Látjuk, hogy a mappingFunction dob egy RuntimeException, amely továbbterjed a computeIfAbsent módszer.
3. Következtetés
Ebben a gyors cikkben a computeIfAbsent módszer, annak aláírása és használata. Végül láttuk, hogyan kezeli a különböző eseteket.
Mint mindig, ezek a kódminták elérhetők a GitHubon.