Apache Commons Zbirke MapUtils

Ovaj je članak dio serije: • Torba za zbirke Apache Commons

• SetUtils zbirki Apache Commons

• Zbirke Apache Commons OrderedMap

• Zbirke Apache Commons BidiMap

• Vodič za Apache Commons Collections CollectionUtils

• MapUtils zbirki Apache Commons (trenutni članak) • Vodič za Apache Commons CircularFifoQueue

1. Uvod

MapUtils jedan je od alata dostupnih u projektu Apache Commons Collections.

Jednostavno rečeno, pruža korisne metode i dekoratere za rad java.util.Map i java.util.SortedMap instance.

2. Postavljanje

Počnimo s dodavanjem ovisnosti:

 org.apache.commons commons-collection4 4.1 

3. Korisne metode

3.1. Stvaranje a Karta iz an Polje

Sada, postavimo nizove koje ćemo koristiti za stvaranje mape:

javna klasa MapUtilsTest {private String [] [] color2DArray = new String [] [] {{"RED", "# FF0000"}, {"GREEN", "# 00FF00"}, {"BLUE", "# 0000FF" }}; privatni niz [] color1DArray = novi niz [] {"CRVENO", "# FF0000", "ZELENO", "# 00FF00", "PLAVO", "# 0000FF"}; privatna karta colorMap; // ...}

Pogledajmo kako možemo stvoriti kartu iz dvodimenzionalnog niza:

@Test public void whenCreateMapFrom2DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (new HashMap (), this.color2DArray); assertThat (this.colorMap, je (aMapWithSize (this.color2DArray.length))); assertThat (this.colorMap, hasEntry ("CRVENA", "# FF0000")); assertThat (this.colorMap, hasEntry ("GREEN", "# 00FF00")); assertThat (this.colorMap, hasEntry ("PLAVO", "# 0000FF")); }

Također bismo mogli koristiti jednodimenzionalni niz. U tom se slučaju niz tretira kao ključevi i vrijednosti u zamjenskim indeksima:

@Test public void whenCreateMapFrom1DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (new HashMap (), this.color1DArray); assertThat (this.colorMap, je (aMapWithSize (this.color1DArray.length / 2))); assertThat (this.colorMap, hasEntry ("CRVENA", "# FF0000")); assertThat (this.colorMap, hasEntry ("GREEN", "# 00FF00")); assertThat (this.colorMap, hasEntry ("PLAVO", "# 0000FF")); }

3.2. Ispis sadržaja a Karta

Puno puta tijekom otklanjanja pogrešaka ili u zapisnicima otklanjanja pogrešaka željeli bismo ispisati cijelu kartu:

@Test public void whenVerbosePrintMap_thenMustPrintFormattedMap () {MapUtils.verbosePrint (System.out, "Neobvezna oznaka", this.colorMap); }

I rezultat:

Izborna oznaka = {CRVENA = # FF0000 PLAVA = # 0000FF ZELENA = # 00FF00}

Možemo i koristiti debugPrint () koji dodatno ispisuje tipove podataka vrijednosti.

3.3. Dobivanje vrijednosti

MapUtils pruža neke metode za izdvajanje vrijednosti s karte za zadani ključ u a null-siguran način.

Na primjer, getString () dobiva a Niz od Karta. The Niz vrijednost se dobiva putem toString (). Po želji možemo odrediti zadanu vrijednost koja će se vratiti ako je vrijednost null ili ako pretvorba ne uspije:

@Test public void whenGetKeyNotPresent_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; Boja niza = MapUtils .getString (this.colorMap, "BLACK", defaultColorStr); assertEquals (boja, zadaniColorStr); }

Imajte na umu da su ove metode null-sigurno, tj. oni se mogu sigurno nositi s null parametar karte:

@Test public void whenGetOnNullMap_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; Boja niza = MapUtils.getString (null, "CRVENA", defaultColorStr); assertEquals (boja, zadaniColorStr); }

Ovdje boja bi dobio vrijednost kao COLOR_NOT_FOUND iako je karta null.

3.4. Invertiranje Karta

Također možemo lako preokrenuti kartu:

@Test public void whenInvertMap_thenMustReturnInvertedMap () {Map invColorMap = MapUtils.invertMap (this.colorMap); int veličina = invColorMap.size (); Assertions.assertThat (invColorMap) .hasSameSizeAs (colorMap) .containsKeys (this.colorMap.values ​​(). ToArray (new String [] {})) .containsValues ​​(this.colorMap.keySet (). ToArray (new String [] { })); }

Ovo bi preokrenulo mapU boji do:

{# 00FF00 = ZELENA # FF0000 = CRVENA # 0000FF = PLAVA}

Ako izvorna karta pridruži istu vrijednost za više ključeva, tada će nakon inverzije jedna od vrijednosti slučajno postati ključ.

3.5. Ništavne i prazne provjere

prazno je() metoda se vraća pravi ako a Karta je null ili prazna.

safeAddToMap () metoda sprječava dodavanje null elemenata a Karta.

4. Dekorateri

Ove metode dodaju dodatnu funkcionalnost a Karta.

U većini slučajeva dobra je praksa ne pohraniti referencu na ukrašenu kartu.

4.1. Fiksne veličine Karta

fixedSizeMap () vraća mapu fiksne veličine iza koje stoji zadana karta. Elementi se mogu mijenjati, ali ne i dodavati ili uklanjati:

@Test (očekuje se = IllegalArgumentException.class) javna void kadaCreateFixedSizedMapAndAdd_thenMustThrowException () {Map rgbMap = MapUtils .fixedSizeMap (MapUtils.putAll (new HashMap (), this.color1DArray); rgbMap.put ("ORANGE", "# FFA500"); }

4.2. Predicirano Karta

The predikatna karta () metoda vraća a Karta osigurava da se svi zadržani elementi podudaraju s navedenim predikatom:

@Test (očekuje se = IllegalArgumentException.class) javna void kadaAddDuplicate_thenThrowException () {Map uniqValuesMap = MapUtils.predicatedMap (this.colorMap, null, PredicateUtils.uniquePredicate ()); uniqValuesMap.put ("NEW_RED", "# FF0000"); }

Ovdje smo naveli predikat za vrijednosti pomoću PredicateUtils.uniquePredicate (). Svaki pokušaj umetanja dvostruke vrijednosti na ovu kartu rezultirat će java.lang.IlegalArgumentException.

Prilagođene predikate možemo implementirati primjenom Predikat sučelje.

4.3. Lijen Karta

lijena karta () vraća mapu na kojoj se vrijednosti inicijaliziraju na zahtjev.

Ako je ključ proslijeđen na ovu kartu Map.get (objekt) metoda nije prisutna na karti, Transformator instanca koristit će se za stvaranje novog objekta koji će biti povezan sa zatraženim ključem:

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

5. Zaključak

U ovom smo brzom vodiču istražili zbirke Apache Commons MapUtils klase i pogledali smo razne korisne metode i dekoratere koji mogu pojednostaviti razne uobičajene operacije s kartama.

Kao i obično, kod je dostupan na GitHub-u.

Sljedeći » Vodič za Apache Commons CircularFifoQueue « Prethodni Vodič za Apache Commons Collections CollectionUtils

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