Útmutató az Apache Commons MultiValuedMap alkalmazáshoz

1. Áttekintés

Ebben a gyors bemutatóban megnézzük a MultiValuedMap felületet biztosít az Apache Commons gyűjtemények könyvtárában.

MultiValuedMap egyszerű API-t biztosít az egyes kulcsok hozzáadásához a Java értékeinek gyűjteményéhez. Ez az utódja org.apache.commons.collections4.MultiMap, amelyet a Commons Collection 4.1-ben elavult.

2. Maven-függőség

A Maven projektekhez hozzá kell adnunk a commons-gyűjtemények4 függőség:

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

3. Elemek hozzáadása a MultiValuedMap

Elemeket adhatunk a tedd és putAll mód.

Kezdjük azzal, hogy létrehozunk egy példányt MultiValuedMap:

MultiValuedMap map = new ArrayListValuedHashMap ();

Ezután nézzük meg, hogyan adhatunk hozzá elemeket egyesével a tedd módszer:

map.put ("gyümölcsök", "alma"); map.put ("gyümölcsök", "narancs");

Ezenkívül adjunk hozzá néhány elemet a putAll metódus, amely egy kulcsot leképez több elemre egyetlen hívás során:

map.putAll ("járművek", Arrays.asList ("autó", "kerékpár")); assertThat ((Gyűjtemény) map.get ("járművek")) .contact ("autó", "kerékpár");

4. Elemek lekérése a MultiValuedMap

MultiValuedMap módszereket biztosít a kulcsok, értékek és kulcs-érték leképezések lekérésére. Vessünk egy pillantást ezekre.

4.1. Szerezd meg a kulcs összes értékét

A kulcshoz tartozó összes érték megszerzéséhez használhatjuk a kap metódus, amely a Gyűjtemény:

assertThat ((Gyűjtemény) map.get ("gyümölcsök")) .conactExactly ("alma", "narancs");

4.2. Az összes kulcsérték-hozzárendelés megszerzése

Vagy használhatjuk a bejegyzés módszer a Gyűjtemény az összes kulcs-érték leképezés a térképen:

Gyűjtemény bejegyzések = map.entries ();

4.3. Minden kulcs beszerzése

Két módszer létezik az a kulcs összes kulcsának lekérésére MultiValuedMap.

Használjuk a kulcsok módszer a MultiSet a billentyűk nézete:

MultiSet kulcsok = map.keys (); assertThat (kulcsok). tartalmaz ("gyümölcsök", "járművek");

Alternatív megoldásként kaphatunk egy Készlet a billentyűk nézete a keySet módszer:

Set keys = map.keySet (); assertThat (kulcsok). tartalmaz ("gyümölcsök", "járművek");

4.4. A térkép összes értékének megszerzése

Végül, ha meg akarjuk szerezni a Gyűjtemény a térkép összes értékének megtekintéséhez használhatjuk a értékek módszer:

Gyűjtemény értékei = map.values ​​(); assertThat (értékek). tartalmaz ("alma", "narancs", "autó", "kerékpár");

5. Elemek eltávolítása a MultiValuedMap

Most nézzük meg az elemek és a kulcsérték-hozzárendelések eltávolításának összes módszerét.

5.1. Távolítsa el az összes kulcshoz hozzárendelt elemet

Először nézzük meg, hogyan lehet eltávolítani a megadott kulcshoz tartozó összes értéket a eltávolítani módszer:

Gyűjtemény eltávolítvaValues ​​= map.remove ("gyümölcsök"); assertThat (map.containsKey ("gyümölcsök")). isFalse (); assertThat (eltávolított értékek). tartalmaz ("alma", "narancs");

Ez a módszer a Gyűjtemény az eltávolított értékek nézete.

5.2. Távolítsa el az egyetlen kulcsérték-hozzárendelést

Tegyük fel, hogy van egy kulcsunk, amely több értékhez van hozzárendelve, de a leképezett értékek közül csak egyet akarunk eltávolítani, a többit hagyva. Ezt könnyen megtehetjük a removeMapping módszer:

logikai isRemoved = map.removeMapping ("gyümölcsök", "alma"); assertThat (map.containsMapping ("gyümölcsök", "alma")). isFalse ();

5.3. Távolítsa el az összes kulcsérték-hozzárendelést

És végül használhatjuk a egyértelmű módszer az összes leképezés eltávolítására a térképről:

térkép.tiszta (); assertThat (map.isEmpty ()). isTrue ();

6. Ellenőrzés Elemek a MultiValuedMap

Ezután vessünk egy pillantást a különféle módszerekre annak ellenőrzésére, hogy létezik-e megadott kulcs vagy érték a térképünkön.

6.1. Ellenőrizze, hogy létezik-e kulcs

Megtudhatjuk, hogy térképünk tartalmaz-e egy megadott kulcs leképezését, használhatjuk a tartalmazzaKey módszer:

assertThat (map.containsKey ("járművek")). isTrue ();

6.2. Ellenőrizze, hogy létezik-e érték

Ezután tegyük fel, hogy ellenőrizni akarjuk, hogy a térképünkön legalább egy kulcs tartalmaz-e egy adott érték leképezését. Ezt megtehetjük a tartalmazzaValue módszer:

assertThat (map.containsValue ("narancs")). isTrue ();

6.3. Ellenőrizze, hogy létezik-e kulcsérték-hozzárendelés

Hasonlóképpen, ha meg akarjuk vizsgálni, hogy egy térkép tartalmaz-e egy adott kulcs- és értékpár leképezését, használhatjuk a tartalmazzaMapping módszer:

assertThat (map.containsMapping ("gyümölcsök", "narancs")). isTrue ();

6.4. Ellenőrizze, hogy a térkép üres-e

Annak ellenőrzésére, hogy egy térkép egyáltalán nem tartalmaz-e kulcsérték-hozzárendelést, használhatjuk a üres módszer:

assertThat (map.isEmpty ()). isFalse;

6.5. Ellenőrizze a térkép méretét

Végül használhatjuk a méret módszer a térkép teljes méretének megszerzéséhez. Ha egy térképen több értékű kulcs van, akkor a térkép teljes mérete megegyezik az összes kulcs összes értékének számával:

assertEquals (4, map.size ());

7. Végrehajtások

Az Apache Commons Gyűjtemények Könyvtára ezen interfész több megvalósítását is biztosítja. Vessünk egy pillantást rájuk.

7.1. ArrayListValuedHashMap

An ArrayListValuedHashMap használ egy Tömb lista belsőleg az egyes kulcsokhoz tartozó értékek tárolásához, tehát megismétli a kulcs-érték párokat:

MultiValuedMap map = new ArrayListValuedHashMap (); map.put ("gyümölcsök", "alma"); map.put ("gyümölcsök", "narancs"); map.put ("gyümölcsök", "narancs"); assertThat ((Gyűjtemény) map.get ("gyümölcsök")) .conactExactly ("alma", "narancs", "narancs");

Most érdemes megjegyezni, hogy ez osztály nem szálbiztos. Ezért, ha ezt a térképet több szálból akarjuk használni, akkor biztosnak kell lennünk a megfelelő szinkronizálásban.

7.2. HashSetValuedHashMap

A HashSetValuedHashMap használja a HashSet az egyes kulcsok értékeinek tárolásához. Ebből kifolyólag, nem engedélyezi a kulcs-érték párok duplikálását.

Lássunk egy gyors példát, ahol kétszer adjuk meg ugyanazt a kulcsérték-hozzárendelést:

MultiValuedMap map = new HashSetValuedHashMap (); map.put ("gyümölcsök", "alma"); map.put ("gyümölcsök", "alma"); assertThat ((Gyűjtemény) map.get ("gyümölcsök")) .conactExactly ("alma");

Figyelje meg, hogyan, ellentétben az előző példánkkal, amelyet használtunk ArrayListValuedHashMap, a HashSetValuedHashMap a megvalósítás figyelmen kívül hagyja a duplikált leképezést.

A HashSetValuedHashMaposztály sem szálbiztos.

7.3. UnmodifiableMultiValuedMap

A UnmodifiableMultiValuedMap egy dekoratőr osztály, amely akkor hasznos, ha az a megváltoztathatatlan példányára van szükségünk MultiValuedMap - vagyis nem engedélyezheti a további módosításokat:

@Test (várható = UnsupportedOperationException.class) public void givenUnmodifiableMultiValuedMap_whenInserting_thenThrowingException () {MultiValuedMap map = new ArrayListValuedHashMap (); map.put ("gyümölcsök", "alma"); map.put ("gyümölcsök", "narancs"); MultiValuedMap immutableMap = MultiMapUtils.unmodifiableMultiValuedMap (térkép); immutableMap.put ("gyümölcsök", "banán"); // dob kivételt}

És még egyszer érdemes megjegyezni ezt a módosítást a végső tedd eredményez egy UnsupportedOperationException.

8. Következtetés

Különböző módszereket láthattunk a MultiValuedMap felület az Apache Commons Gyűjtemények könyvtárából. Ezenkívül feltártunk néhány népszerű megvalósítást.

És mint mindig, a teljes forráskód elérhető a Githubon.


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