Zbierky Apache Commons MapUtils

Tento článok je súčasťou série: • Apache Commons Collections Bag

• SetUtils zbierok Apache Commons

• Apache Commons Collections OrderedMap

• Zbierka Apache Commons BidiMap

• Sprievodca zbierkami zbierok Apache Commons CollectionUtils

• Zbierka Apache Commons MapUtils (aktuálny článok) • Sprievodca po Apache Commons CircularFifoQueue

1. Úvod

MapUtils je jedným z nástrojov dostupných v projekte Apache Commons Collections.

Zjednodušene povedané, poskytuje užitočné metódy a dekoratéry, s ktorými sa dá pracovať java.util.Map a java.util.SortedMap inštancie.

2. Inštalácia

Začnime pridaním závislosti:

 org.apache.commons commons-collections4 4.1 

3. Úžitkové metódy

3.1. Vytvorenie a Mapa z an Pole

Teraz nastavíme polia, ktoré použijeme na vytvorenie mapy:

verejná trieda MapUtilsTest {súkromný reťazec [] [] color2DArray = nový reťazec [] [] {{"RED", "# FF0000"}, {"GREEN", "# 00FF00"}, {"BLUE", "# 0000FF" }}; private String [] color1DArray = new String [] {"RED", "# FF0000", "GREEN", "# 00FF00", "BLUE", "# 0000FF"}; súkromná mapa colorMap; // ...}

Pozrime sa, ako môžeme vytvoriť mapu z dvojrozmerného poľa:

@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 ("ČERVENÉ", "# FF0000")); assertThat (this.colorMap, hasEntry ("ZELENÁ", "# 00FF00")); assertThat (this.colorMap, hasEntry ("BLUE", "# 0000FF")); }

Mohli by sme použiť aj jednorozmerné pole. V takom prípade sa s poľom zaobchádza ako s kľúčmi a hodnotami v alternatívnych indexoch:

@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 ("ČERVENÉ", "# FF0000")); assertThat (this.colorMap, hasEntry ("ZELENÁ", "# 00FF00")); assertThat (this.colorMap, hasEntry ("BLUE", "# 0000FF")); }

3.2. Tlač obsahu a Mapa

Mnohokrát by sme počas ladenia alebo v protokoloch ladenia chceli vytlačiť celú mapu:

@Test public void whenVerbosePrintMap_thenMustPrintFormattedMap () {MapUtils.verbosePrint (System.out, "voliteľný štítok", this.colorMap); }

A výsledok:

Voliteľný štítok = {RED = # FF0000 MODRÁ = # 0000FF ZELENÁ = # 00FF00}

Môžeme tiež použiť debugPrint () ktorý dodatočne vytlačí dátové typy hodnôt.

3.3. Získavanie hodnôt

MapUtils poskytuje niektoré metódy extrakcie hodnoty z mapy pre daný kľúč v a nulový-bezpečným spôsobom.

Napríklad, getString () dostane a String z Mapa. The String hodnota sa získa pomocou natiahnuť(). Voliteľne môžeme určiť predvolenú hodnotu, ktorá sa má vrátiť, ak je nulový alebo ak sa prevod nepodarí:

@Test public void whenGetKeyNotPresent_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; Farba reťazca = MapUtils .getString (this.colorMap, "ČIERNA", defaultColorStr); assertEquals (color, defaultColorStr); }

Upozorňujeme, že tieto metódy sú nulový- bezpečné, tj. môžu bezpečne manipulovať s nulový parameter mapy:

@Test public void whenGetOnNullMap_thenMustReturnDefaultValue () {String defaultColorStr = "COLOR_NOT_FOUND"; Farba reťazca = MapUtils.getString (null, "ČERVENÉ", defaultColorStr); assertEquals (color, defaultColorStr); }

Tu farba by dostal hodnotu ako COLOR_NOT_FOUND aj keď mapa je nulový.

3.4. Obracanie Mapa

Mapu tiež môžeme ľahko obrátiť:

@Test public void whenInvertMap_thenMustReturnInvertedMap () {Map invColorMap = MapUtils.invertMap (this.colorMap); int size = invColorMap.size (); Assertions.assertThat (invColorMap) .hasSameSizeAs (colorMap) .containsKeys (this.colorMap.values ​​(). ToArray (nový reťazec [] {})) .containsValues ​​(this.colorMap.keySet (). ToArray (nový reťazec [] { })); }

Tým by sa obrátil colorMap do:

{# 00FF00 = ZELENÁ # FF0000 = ČERVENÁ # 0000FF = MODRÁ}

Ak zdrojová mapa asociuje rovnakú hodnotu pre viac kľúčov, potom sa po inverzii stane jedna z hodnôt náhodne kľúčom.

3.5. Kontroly Null a Empty

je prázdny() metóda sa vracia pravda Ak Mapa je nulový alebo prázdne.

safeAddToMap () metóda zabráni pridaniu nulových prvkov do a Mapa.

4. Dekoratéri

Tieto metódy pridávajú do a Mapa.

Vo väčšine prípadov je dobrým zvykom odkaz na vyzdobenú mapu neukladať.

4.1. Pevná veľkosť Mapa

fixedSizeMap () vráti mapu pevnej veľkosti s podporou danej mapy. Prvky je možné meniť, ale nie pridávať ani odstraňovať:

@Test (očakáva sa = IllegalArgumentException.class) public void whenCreateFixedSizedMapAndAdd_thenMustThrowException () {Map rgbMap = MapUtils .fixedSizeMap (MapUtils.putAll (new HashMap (), this.color1DArray)); rgbMap.put ("ORANŽOVÁ", "# FFA500"); }

4.2. Predpokladané Mapa

The predicatedMap () metóda vracia a Mapa zaisťuje, aby sa všetky zadržané prvky zhodovali s poskytnutým predikátom:

@Test (očakáva sa = IllegalArgumentException.class) public void whenAddDuplicate_thenThrowException () {Map uniqValuesMap = MapUtils.predicatedMap (this.colorMap, null, PredicateUtils.uniquePredicate ()); uniqValuesMap.put ("NEW_RED", "# FF0000"); }

Tu sme zadali predikát pre hodnoty pomocou PredicateUtils.uniquePredicate (). Akýkoľvek pokus o vloženie duplicitnej hodnoty do tejto mapy bude mať za následok java.lang.IllegalArgumentException.

Vlastné predikáty môžeme implementovať implementáciou Predikát rozhranie.

4.3. Lenivý Mapa

lazyMap () vráti mapu, kde sa hodnoty na požiadanie inicializujú.

Ak na túto mapu prešiel kľúč Map.get (objekt) metóda nie je uvedená na mape, Transformátor inštancia sa použije na vytvorenie nového objektu, ktorý bude asociovaný s požadovaným kľúčom:

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

5. Záver

V tomto rýchlom výučbe sme preskúmali zbierky Apache Commons MapUtils triedy a pozreli sme sa na rôzne úžitkové metódy a dekoratéry, ktoré môžu zjednodušiť rôzne bežné operácie s mapami.

Ako obvykle je kód k dispozícii na GitHub.

Ďalšie » Sprievodca po Apache Commons CircularFifoQueue « Predchádzajúci Sprievodca zbierkami zbierok Apache Commons CollectionUtils