Apache Commons samlinger MapUtils

Denne artikkelen er en del av 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 Collections MapUtils (nåværende artikkel) • Guide til Apache Commons CircularFifoQueue

1. Introduksjon

MapUtils er et av verktøyene som er tilgjengelige i Apache Commons Collections-prosjektet.

Enkelt sagt, det gir verktøymetoder og dekoratører å jobbe med java.util.Kart og java.util.SortedMap tilfeller.

2. Oppsett

La oss starte med å legge til avhengighet:

 org.apache.commons commons-collection4 4.1 

3. Verktøymetoder

3.1. Opprette en Kart fra en Array

La oss nå sette opp matriser som vi vil bruke til å lage et kart:

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

La oss se hvordan vi kan lage et kart fra en todimensjonal matrise:

@Test offentlig ugyldig nårCreateMapFrom2DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (ny HashMap (), this.color2DArray); assertThat (this.colorMap, er (aMapWithSize (this.color2DArray.length))); assertThat (this.colorMap, hasEntry ("RED", "# FF0000")); assertThat (this.colorMap, hasEntry ("GREEN", "# 00FF00")); assertThat (this.colorMap, hasEntry ("BLUE", "# 0000FF")); }

Vi kan også bruke en endimensjonal matrise. I så fall blir matrisen behandlet som nøkler og verdier i alternative indekser:

@Test offentlig ugyldig nårCreateMapFrom1DArray_theMapIsCreated () {this.colorMap = MapUtils.putAll (ny HashMap (), this.color1DArray); assertThat (this.colorMap, er (aMapWithSize (this.color1DArray.length / 2))); assertThat (this.colorMap, hasEntry ("RED", "# FF0000")); assertThat (this.colorMap, hasEntry ("GREEN", "# 00FF00")); assertThat (this.colorMap, hasEntry ("BLUE", "# 0000FF")); }

3.2. Skrive ut innholdet til en Kart

Mange ganger mens vi feilsøker eller i feilsøkingslogger, vil vi skrive ut hele kartet:

@Test offentlig ugyldig nårVerbosePrintMap_thenMustPrintFormattedMap () {MapUtils.verbosePrint (System.out, "Valgfri etikett", this.colorMap); }

Og resultatet:

Valgfri etikett = {RED = # FF0000 BLUE = # 0000FF GREEN = # 00FF00}

Vi kan også bruke debugPrint () som i tillegg skriver ut datatypene til verdiene.

3.3. Få verdier

MapUtils gir noen metoder for å hente ut verdi fra et kart for en gitt nøkkel i a null-sikker måte.

For eksempel, getString () får en String fra Kart. De String verdien oppnås via toString (). Vi kan eventuelt spesifisere standardverdien som skal returneres hvis verdien er null eller hvis konverteringen mislykkes:

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

Merk at disse metodene er null-safe dvs. de kan trygt håndtere null kartparameter:

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

Her er farge ville få verdien som COLOR_NOT_FOUND selv om kartet er det null.

3.4. Invertere Kart

Vi kan også enkelt reversere et kart:

@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 invertere colorMap til:

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

Hvis kildekartet knytter samme verdi til flere taster, vil en av verdiene etter inversjon bli en nøkkel tilfeldig.

3.5. Null og tom kontroll

er tom() metoden returnerer ekte hvis en Kart er null eller tom.

safeAddToMap () metoden forhindrer tilsetning av nullelementer til a Kart.

4. Dekoratører

Disse metodene gir ekstra funksjonalitet til a Kart.

I de fleste tilfeller er det god praksis å ikke lagre referansen til det dekorerte kartet.

4.1. Fast størrelse Kart

fixedSizeMap () returnerer et kart i fast størrelse støttet av det gitte kartet. Elementer kan endres, men ikke legges til eller fjernes:

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

4.2. Predikert Kart

De predicatedMap () metoden returnerer a Kart sørger for at alle holdte elementer stemmer overens med det angitte predikatet:

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

Her spesifiserte vi predikatet for verdier ved hjelp av PredicateUtils.uniquePredicate (). Ethvert forsøk på å sette inn en duplikatverdi i dette kartet vil resultere i java.lang.IllegalArgumentException.

Vi kan implementere tilpassede predikater ved å implementere Predikere grensesnitt.

4.3. Lat Kart

lazyMap () returnerer et kart der verdiene initialiseres når du blir bedt om det.

Hvis en nøkkel sendes til dette kartet Map.get (Objekt) metoden ikke er tilstede i kartet, Transformator forekomst vil bli brukt til å lage et nytt objekt som vil bli assosiert med den forespurte nøkkelen:

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

5. Konklusjon

I denne raske opplæringen har vi utforsket Apache Commons Collections MapUtils klasse og vi så på ulike verktøymetoder og dekoratører som kan forenkle forskjellige vanlige kartoperasjoner.

Som vanlig er koden tilgjengelig på GitHub.

Neste » Guide til Apache Commons CircularFifoQueue « Forrige En guide til Apache Commons Collection CollectionUtils

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