Apache Commons samlinger MapUtils

Denne artikel er en del af en serie: • Apache Commons Collections Bag

• Apache Commons samlinger SetUtils

• Apache Commons samlinger OrderedMap

• Api Commons samlinger BidiMap

• En guide til Apache Commons Collections CollectionUtils

• Apache Commons samlinger MapUtils (nuværende artikel) • Guide til Apache Commons CircularFifoQueue

1. Introduktion

MapUtils er et af de tilgængelige værktøjer i Apache Commons Collections-projektet.

Kort sagt, det giver værktøjsmetoder og dekoratører at arbejde med java.util.Kort og java.util.SortedMap tilfælde.

2. Opsætning

Lad os starte med at tilføje afhængighed:

 org.apache.commons commons-collection4 4.1 

3. Værktøjsmetoder

3.1. Oprettelse af en Kort fra en Array

Lad os nu oprette arrays, som vi vil bruge til at oprette et kort:

offentlig klasse MapUtilsTest {privat streng [] [] color2DArray = ny streng [] [] {{"RØD", "# FF0000"}, {"GRØN", "# 00FF00"}, {"BLÅ", "# 0000FF" }}; privat streng [] color1DArray = ny streng [] {"RØD", "# FF0000", "GRØN", "# 00FF00", "BLÅ", "# 0000FF"}; privat kort colorMap; // ...}

Lad os se, hvordan vi kan oprette et kort fra et todimensionalt array:

@Test offentlig ugyldigt nårCreateMapFrom2DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (ny HashMap (), this.color2DArray); assertThat (denne.colorMap er (aMapWithSize (denne.color2DArray.length))); assertThat (this.colorMap, hasEntry ("RED", "# FF0000")); assertThat (this.colorMap, hasEntry ("GRØNN", "# 00FF00")); assertThat (this.colorMap, hasEntry ("BLÅ", "# 0000FF")); }

Vi kunne også bruge et endimensionelt array. I så fald behandles arrayet som nøgler og værdier i alternative indekser:

@Test offentlig ugyldigt nårCreateMapFrom1DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (ny HashMap (), this.color1DArray); assertThat (denne.colorMap er (aMapWithSize (denne.color1DArray.length / 2))); assertThat (this.colorMap, hasEntry ("RED", "# FF0000")); assertThat (this.colorMap, hasEntry ("GRØNN", "# 00FF00")); assertThat (this.colorMap, hasEntry ("BLÅ", "# 0000FF")); }

3.2. Udskrivning af indholdet af en Kort

Mange gange under debugging eller i debug-logfiler vil vi gerne udskrive hele kortet:

@Test offentligt ugyldigt nårVerbosePrintMap_thenMustPrintFormattedMap () {MapUtils.verbosePrint (System.out, "Valgfri etiket", this.colorMap); }

Og resultatet:

Valgfri etiket = {RØD = # FF0000 BLÅ = # 0000FF GRØN = # 00FF00}

Vi kan også bruge debugPrint () der desuden udskriver datatyperne for værdierne.

3.3. Få værdier

MapUtils giver nogle metoder til at udtrække værdi fra et kort til en given nøgle i a nul-sikker måde.

For eksempel, getString () får en Snor fra Kort. Det Snor værdi opnås via toString (). Vi kan eventuelt angive den standardværdi, der skal returneres, hvis værdien er nul eller hvis konverteringen mislykkes:

@Test offentlig ugyldig nårGetKeyNotPresent_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; String color = MapUtils .getString (this.colorMap, "BLACK", defaultColorStr); assertEquals (farve, standardColorStr); }

Bemærk, at disse metoder er nul-sikker dvs. de kan sikkert håndtere nul kortparameter:

@Test offentlig ugyldig nårGetOnNullMap_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; String color = MapUtils.getString (null, "RED", defaultColorStr); assertEquals (farve, defaultColorStr); }

Her er farve ville få værdien som COLOR_NOT_FOUND selvom kortet er nul.

3.4. Omvendt Kort

Vi kan også nemt vende et kort:

@Test offentlig ugyldig nårInvertMap_thenMustReturnInvertedMap () {Map invColorMap = MapUtils.invertMap (this.colorMap); int størrelse = invColorMap.size (); Assertions.assertThat (invColorMap) .hasSameSizeAs (colorMap) .containsKeys (this.colorMap.values ​​(). ToArray (new String [] {})) .containsValues ​​(this.colorMap.keySet (). ToArray (new String [] { })); }

Dette ville vende om colorMap til:

{# 00FF00 = GRØNN # FF0000 = RØD # 0000FF = BLÅ}

Hvis kildekortet knytter den samme værdi til flere nøgler, bliver en af ​​værdierne tilfældigt efter inversion.

3.5. Nul og tom kontrol

er tom() metoden vender tilbage rigtigt hvis en Kort er nul eller tom.

safeAddToMap () metode forhindrer tilføjelse af nulelementer til a Kort.

4. Dekoratører

Disse metoder tilføjer yderligere funktionalitet til a Kort.

I de fleste tilfælde er det god praksis ikke at gemme henvisningen til det dekorerede kort.

4.1. Fast størrelse Kort

fixedSizeMap () returnerer et kort i fast størrelse bakket op af det givne kort. Elementer kan ændres, men ikke tilføjes eller fjernes:

@Test (forventet = IllegalArgumentException.class) offentlig ugyldig nårCreateFixedSizedMapAndAdd_thenMustThrowException () {Map rgbMap = MapUtils .fixedSizeMap (MapUtils.putAll (ny HashMap (), this.color1DArray); rgbMap.put ("ORANGE", "# FFA500"); }

4.2. Prædikeret Kort

Det predicatedMap () metode returnerer a Kort sikrer, at alle tilbageholdte elementer matcher det angivne predikat:

@Test (forventet = IllegalArgumentException.class) offentlig ugyldig nårAddDuplicate_thenThrowException () {Map uniqValuesMap = MapUtils.predicatedMap (this.colorMap, null, PredicateUtils.uniquePredicate ()); uniqValuesMap.put ("NEW_RED", "# FF0000"); }

Her specificerede vi prædikatet for værdier ved hjælp af PredicateUtils.uniquePredicate (). Ethvert forsøg på at indsætte en duplikatværdi på dette kort vil resultere i java.lang.IllegalArgumentException.

Vi kan implementere brugerdefinerede prædikater ved at implementere Prædikat interface.

4.3. Doven Kort

lazyMap () returnerer et kort, hvor værdier initialiseres efter anmodning.

Hvis en nøgle sendes til dette kort Map.get (Objekt) metoden er ikke til stede på kortet, Transformer instans vil blive brugt til at oprette et nyt objekt, der vil blive knyttet til den anmodede nøgle:

@Test offentlig ugyldig nårCreateLazyMap_theMapIsCreated () {Map intStrMap = MapUtils.lazyMap (ny HashMap (), TransformerUtils.stringValueTransformer ()); assertThat (intStrMap, er (anEmptyMap ())); intStrMap.get (1); intStrMap.get (2); intStrMap.get (3); assertThat (intStrMap, er (aMapWithSize (3))); }

5. Konklusion

I denne hurtige vejledning har vi udforsket Apache Commons Collections MapUtils klasse, og vi kiggede på forskellige hjælpemetoder og dekoratører, der kan forenkle forskellige almindelige kortoperationer.

Som sædvanlig er koden tilgængelig på GitHub.

Næste » Vejledning til Apache Commons CircularFifoQueue « Forrige En guide til samling af Apache Commons-samlingUtils

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