Pretvorba mape u niz u Javi

1. Pregled

U ovom uputstvu usredotočit ćemo se na pretvorbu iz a Karta do a Niz i obrnuto.

Prvo ćemo vidjeti kako to postići korištenjem osnovnih Java metoda, a nakon toga koristit ćemo neke biblioteke trećih strana.

2. Osnovno Karta Primjer

U svim ćemo primjerima koristiti isto Karta provedba:

Riječi na mapiByKey = novi HashMap (); wordsByKey.put (1, "jedan"); wordsByKey.put (2, "dva"); wordsByKey.put (3, "tri"); wordsByKey.put (4, "četiri");

3. Pretvori a Karta do a Niz iteriranjem

Ponovimo sve ključeve u našem Karta i, za svakog od njih, dodajte kombinaciju ključ / vrijednost našem rezultatu StringBuilder objekt.

Radi formatiranja, rezultat možemo umotati u kovrčave zagrade:

javni String convertWithIteration (karta karte) {StringBuilder mapAsString = new StringBuilder ("{"); for (Integer key: map.keySet ()) {mapAsString.append (key + "=" + map.get (key) + ","); } mapAsString.delete (mapAsString.length () - 2, mapAsString.length ()). append ("}"); vratiti mapAsString.toString (); }

Da provjerimo jesmo li konvertirali naš Karta ispravno, pokrenimo sljedeći test:

@Test javna praznina givenMap_WhenUsingIteration_ThenResultingStringIsCorrect () {String mapAsString = MapToString.convertWithIteration (wordsByKey); Assert.assertEquals ("{1 = jedan, 2 = dva, 3 = tri, 4 = četiri}", mapAsString); }

4. Pretvori a Karta do a Niz Korištenje Java Streamova

Da bismo izvršili pretvorbu pomoću streamova, prvo moramo stvoriti stream od dostupnih Karta tipke.

Kao drugo, svaki ključ preslikavamo na čovjeku čitljiv Niz.

Napokon, pridružujemo se tim vrijednostima i, radi praktičnosti, dodajemo neka pravila oblikovanja pomoću Kolekcionari.joining () metoda:

javni String convertWithStream (karta karte) {String mapAsString = map.keySet (). stream () .map (key -> key + "=" + map.get (key)) .collect (Collectors.joining (",", "{", "}"))); povratak mapAsString; }

5. Pretvori a Karta do a Niz Korištenjem Guave

Dodajmo Guavu u naš projekt i vidjet ćemo kako možemo postići konverziju u jednom retku koda:

 com.google.guava guava 27.0.1-jre 

Da biste izvršili pretvorbu pomoću Guave Stolar klase, moramo definirati separator između različitih Karta unosi i razdjelnik između ključeva i vrijednosti:

javni String convertWithGuava (karta karte) {return Joiner.on (","). withKeyValueSeparator ("="). join (karta); }

6. Pretvori a Karta do a Niz Korištenje Apache Commons

Da bismo koristili Apache Commons, dodajmo prvo sljedeću ovisnost:

 org.apache.commons commons-collection4 4.2 

Pridruživanje je vrlo jednostavno - samo trebamo nazvati StringUtils.join metoda:

javni String convertWithApache (karta karte) {return StringUtils.join (karta); }

Posebno se spominje otklanjanje pogrešakaPrint metoda dostupna u Apache Commons. Vrlo je koristan za uklanjanje pogrešaka.

Kada nazovemo:

MapUtils.debugPrint (System.out, "Mapiraj kao niz", wordsByKey);

Tekst za otklanjanje pogrešaka bit će zapisan na konzolu:

Mapa kao niz = {1 = jedan java.lang.String 2 = dva java.lang.String 3 = tri java.lang.String 4 = četiri java.lang.String} java.util.HashMap

7. Pretvori a Niz do a Karta Korištenje streamova

Da biste izvršili pretvorbu iz a Niz do a Karta, definirajmo gdje se dijeliti i kako izvući ključeve i vrijednosti:

javna karta convertWithStream (String mapAsString) {Map map = Arrays.stream (mapAsString.split (",")) .map (entry -> entry.split ("=")) .collect (Collectors.toMap (entry -> entry) [0], unos -> unos [1])); karta povratka; }

8. Pretvori a Niz do a Karta Korištenjem Guave

Kompaktnija verzija gore navedenog je oslanjanje na Guavu koja će za nas obaviti cijepanje i konverziju u jednom retku:

javna karta convertWithGuava (String mapAsString) {return Splitter.on (','). withKeyValueSeparator ('='). split (mapAsString); }

9. Zaključak

U ovom uputstvu vidjeli smo kako pretvoriti a Karta do a Niz i obrnuto, koristeći i osnovne Java metode i neovisne knjižnice.

Implementacija svih ovih primjera može se naći na GitHubu.