Apache Commons Gyűjtemények MapUtils

Ez a cikk egy sorozat része: • Apache Commons Gyűjtemények Táska

• Apache Commons Gyűjtemények SetUtils

• Apache Commons Gyűjtemények OrderedMap

• Apache Commons Gyűjtemények BidiMap

• Útmutató az Apache Commons Collections CollectionUtils programhoz

• Apache Commons Gyűjtemények MapUtils (aktuális cikk) • Útmutató az Apache Commons CircularFifoQueue-hoz

1. Bemutatkozás

MapUtils az Apache Commons Collections projektben elérhető eszközök egyike.

Egyszerűen fogalmazva, hasznos módszereket és dekoratőröket biztosít a munkához java.util.Térkép és java.util.SortedMap példányok.

2. Beállítás

Kezdjük a függőség hozzáadásával:

 org.apache.commons commons-gyűjtemények4 4.1 

3. Segédprogram módszerek

3.1. A. Létrehozása Térkép egy an Sor

Most állítsunk be tömböket, amelyeket a térkép létrehozásához használunk:

nyilvános osztály MapUtilsTest {privát karakterlánc [] [] color2DArray = új karakterlánc [] [] {{"RED", "# FF0000"}, {"ZÖLD", "# 00FF00"}, {"KÉK", "# 0000FF" }}; privát karakterlánc [] color1DArray = új karakterlánc [] {"RED", "# FF0000", "ZÖLD", "# 00FF00", "KÉK", "# 0000FF"}; privát Térkép colorMap; // ...}

Nézzük meg, hogyan hozhatunk létre térképet egy kétdimenziós tömbből:

@Test public void whenCreateMapFrom2DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (új HashMap (), this.color2DArray); assertThat (this.colorMap, (aMapWithSize (this.color2DArray.length))); assertThat (this.colorMap, hasEntry ("RED", "# FF0000")); assertThat (this.colorMap, hasEntry ("ZÖLD", "# 00FF00")); assertThat (this.colorMap, hasEntry ("KÉK", "# 0000FF")); }

Használhatnánk egydimenziós tömböt is. Ebben az esetben a tömböt kulcsként és értékként kezeljük alternatív indexekben:

@Test public void whenCreateMapFrom1DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (új HashMap (), this.color1DArray); assertThat (this.colorMap, (aMapWithSize (this.color1DArray.length / 2))); assertThat (this.colorMap, hasEntry ("RED", "# FF0000")); assertThat (this.colorMap, hasEntry ("ZÖLD", "# 00FF00")); assertThat (this.colorMap, hasEntry ("KÉK", "# 0000FF")); }

3.2. A tartalom kinyomtatása Térkép

Hibakeresés közben vagy hibakeresési naplókban sokszor ki akarjuk nyomtatni a teljes térképet:

@Test public void whenVerbosePrintMap_thenMustPrintFormattedMap () {MapUtils.verbosePrint (System.out, "Opcionális címke", this.colorMap); }

És az eredmény:

Opcionális címke = {RED = # FF0000 KÉK = # 0000FF ZÖLD = # 00FF00}

Használhatjuk is debugPrint () amely ezen felül kiírja az értékek adattípusait.

3.3. Értékek megszerzése

MapUtils bemutat néhány módszert az érték kibontására a térképből egy adott kulcshoz a nulla-biztonságos módon.

Például, getString () kap egy Húr tól Térkép. A Húr értéket kapjuk toString (). Opcionálisan megadhatjuk a visszaadandó alapértelmezett értéket, ha az nulla vagy ha az átalakítás sikertelen:

@Test public void whenGetKeyNotPresent_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; Karakterlánc színe = MapUtils .getString (this.colorMap, "BLACK", defaultColorStr); assertEquals (szín, alapértelmezettColorStr); }

Vegye figyelembe, hogy ezek a módszerek igen nulla-biztonságos azaz biztonságosan tudják kezelni a nulla térképparaméter:

@Test public void whenGetOnNullMap_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; Karakterlánc színe = MapUtils.getString (null, "RED", defaultColorStr); assertEquals (szín, alapértelmezettColorStr); }

Itt a szín megkapná az értéket as COLOR_NOT_FOUND annak ellenére, hogy a térkép az nulla.

3.4. Megfordítva a Térkép

Könnyen megfordíthatunk egy térképet is:

@Test public void whenInvertMap_thenMustReturnInvertedMap () {Map invColorMap = MapUtils.invertMap (this.colorMap); int méret = invColorMap.size (); Assertions.assertThat (invColorMap) .hasSameSizeAs (colorMap) .containsKeys (this.colorMap.values ​​(). ToArray (új karakterlánc [] {})) .containsValues ​​(this.colorMap.keySet (). ToArray (új karakterlánc [] { })); }

Ez megfordítaná a colorMap nak nek:

{# 00FF00 = ZÖLD # FF0000 = PIROS # 0000FF = KÉK}

Ha a forrástérkép ugyanazt az értéket társítja több kulcshoz, akkor az inverzió után az egyik érték véletlenszerűen kulcs lesz.

3.5. Null és üres ellenőrzések

üres() metódus visszatér igaz Ha egy Térkép van nulla vagy üres.

safeAddToMap () módszer megakadályozza a null elemek hozzáadását az a-hoz Térkép.

4. Díszítők

Ezek a módszerek további funkcionalitást adnak a Térkép.

A legtöbb esetben jó gyakorlat, ha nem tároljuk a díszített Térképre való hivatkozást.

4.1. Fix méretű Térkép

fixedSizeMap () rögzített méretű térképet ad vissza, amelyet az adott térkép támogat. Az elemeket meg lehet változtatni, de nem lehet hozzáadni vagy eltávolítani:

@Test (várható = IllegalArgumentException.class) public void whenCreateFixedSizedMapAndAdd_thenMustThrowException () {Map rgbMap = MapUtils .fixedSizeMap (MapUtils.putAll (new HashMap (), this.color1DA rgbMap.put ("NARANCS", "# FFA500"); }

4.2. Predikált Térkép

A predicatedMap () metódus a Térkép biztosítja, hogy az összes tartott elem megfeleljen a megadott állítmánynak:

@Test (várható = IllegalArgumentException.class) public void whenAddDuplicate_thenThrowException () {Map uniqValuesMap = MapUtils.predicatedMap (this.colorMap, null, PredicateUtils.uniquePredicate ()); uniqValuesMap.put ("NEW_RED", "# FF0000"); }

Itt adtuk meg az értékek predikátumát a PredicateUtils.uniquePredicate (). Bármilyen kísérlet megismételni az értéket ebbe a térképbe azt eredményezi java.lang.IllegalArgumentException.

A predikátumokat a. Implementálásával valósíthatjuk meg Állítmány felület.

4.3. Lusta Térkép

lazyMap () visszaad egy térképet, ahol az értékek inicializálásra kerülnek, amikor kérik.

Ha egy kulcs átjutott a térképhez Map.get (Object) módszer nem szerepel a térképen, az Transzformátor példányt fog használni egy új objektum létrehozásához, amely társul a kért kulccsal:

@Test public void whenCreateLazyMap_theMapIsCreated () {Map intStrMap = MapUtils.lazyMap (új HashMap (), TransformerUtils.stringValueTransformer ()); assertThat (intStrMap, is (anEmptyMap ())); intStrMap.get (1); intStrMap.get (2); intStrMap.get (3); assertThat (intStrMap, van (aMapWithSize (3))); }

5. Következtetés

Ebben a gyors bemutatóban felfedeztük az Apache Commons gyűjteményeket MapUtils osztályban, és különféle hasznossági módszereket és dekorátorokat vizsgáltunk, amelyek leegyszerűsíthetik a különféle térképi műveleteket.

Szokás szerint a kód elérhető a GitHubon.

Következő » Útmutató az Apache Commons CircularFifoQueue-hoz « Előző Útmutató az Apache Commons gyűjtemények gyűjteményéhez