Pridružite se i podijelite nizove i zbirke na Javi

1. Pregled

U ovom brzom vodiču naučit ćemo kako se pridružiti i podijeliti Nizovi i Zbirke na Javi, dobro koristeći novu podršku za stream.

2. Pridružite se dvojici Nizovi

Krenimo od spajanja dvoje Nizovi zajedno koristeći Stream.concat:

@Test public void whenJoiningTwoArrays_thenJoined () {String [] životinje1 = novi niz [] {"Pas", "Mačka"}; Niz [] životinje2 = novi niz [] {"Ptica", "Krava"}; String [] rezultat = Stream.concat (Arrays.stream (životinje1), Arrays.stream (životinje2)). ToArray (String [] :: novo); assertArrayEquals (rezultat, novi String [] {"Pas", "Mačka", "Ptica", "Krava"}); }

3. Pridružite se dvojici Zbirke

Učinimo isto spajanje s dvoje Zbirke:

@Test public void whenJoiningTwoCollections_thenJoined () {Collection collection1 = Arrays.asList ("Dog", "Cat"); Zbirka collection2 = Arrays.asList ("Ptica", "Krava", "Moose"); Rezultat kolekcije = Stream.concat (collection1.stream (), collection2.stream ()) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays.asList ("Pas", "Mačka", "Ptica", "Krava", "Moose"))); }

4. Pridružite se dvojici Zbirke Wi filtar

Sad, pridružimo se dvoje Zbirke brojeva koji filtriraju bilo što veće od 10:

@Test public void whenJoiningTwoCollectionsWithFilter_thenJoined () {Collection collection1 = Arrays.asList ("Dog", "Cat"); Zbirka collection2 = Arrays.asList ("Ptica", "Krava", "Moose"); Rezultat kolekcije = Stream.concat (collection1.stream (), collection2.stream ()) .filter (e -> e.length () == 3) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays.asList ("Pas", "Mačka", "Krava"))); }

5. Pridružite se Polje U Niz

Dalje, pridružimo se nizu u Niz pomoću a Kolektor:

@Test javna void whenConvertArrayToString_thenConverted () {String [] životinje = novi niz [] {"Pas", "Mačka", "Ptica", "Krava"}; Rezultat niza = Arrays.stream (životinje) .collect (Collectors.joining (",")); assertEquals (rezultat, "Pas, Mačka, Ptica, Krava"); }

6. Pridružite se a Kolekcija U Niz

Učinimo isto, ali s a Kolekcija:

@Test javna praznina whenConvertCollectionToString_thenConverted () {Zbirka životinja = Arrays.asList ("Pas", "Mačka", "Ptica", "Krava"); Rezultat niza = animals.stream (). Collect (Collectors.joining (",")); assertEquals (rezultat, "Pas, Mačka, Ptica, Krava"); }

7. Pridružite se a Karta U Niz

Dalje, izradimo a Niz od a Karta.

Proces je vrlo sličan prethodnim primjerima, ali ovdje imamo dodatni korak da se prvo pridružimo svakom KartaUlazak:

@Test public void whenConvertMapToString_thenConverted () {Mapa životinja = novi HashMap (); animals.put (1, "Pas"); animals.put (2, "Mačka"); animals.put (3, "Krava"); Rezultat niza = animals.entrySet (). Stream () .map (entry -> entry.getKey () + "=" + entry.getValue ()) .collect (Collectors.joining (",")); assertEquals (rezultat, "1 = pas, 2 = mačka, 3 = krava"); }

8. Pridružite se ugniježđenom Zbirke U Niz

Učinimo nešto malo složenije. Pridružimo se nekima ugniježđenim Zbirke u a Niz.

U sljedećem primjeru prvo se pridružujemo svakoj ugniježđenoj Zbirci, a zatim pridružujemo rezultat svake od njih:

@Test public void whenConvertNestedCollectionToString_thenConverted () {Zbirka ugniježđeno = novo ArrayList (); nested.add (Arrays.asList ("Pas", "Mačka")); nested.add (Arrays.asList ("Krava", "Svinja")); Rezultat niza = ugniježđeni.stream (). Karta (nextList -> nextList.stream () .collect (Collectors.joining ("-"))) .collect (Collectors.joining (";")); assertEquals (rezultat, "Pas-mačka; Krava-svinja"); }

9. Ručka Nula Vrijednosti prilikom pridruživanja

Da ne vidimo kako možemo koristiti a filtar preskočiti bilo koji null vrijednosti:

@Test javna praznina whenConvertCollectionToStringAndSkipNull_thenConverted () {Zbirka životinja = Arrays.asList ("Pas", "Mačka", null, "Moose"); Rezultat niza = animals.stream () .filter (Objects :: nonNull) .collect (Collectors.joining (",")); assertEquals (rezultat, "Pas, Mačka, Moose"); }

10. Split a Kolekcija u dva

Podijelimo a Kolekcija brojeva na dva Zbirke u sredini:

@Test javna praznina kadaSplitCollectionHalf_thenConverted () {Zbirka životinja = Arrays.asList ("Pas", "Mačka", "Krava", "Ptica", "Moose", "Svinja"); Rezultat zbirke1 = novi ArrayList (); Rezultat kolekcije2 = novi ArrayList (); AtomicInteger count = novi AtomicInteger (); int srednja točka = Math.round (animals.size () / 2); animals.forEach (next -> {int index = count.getAndIncrement (); if (index <midpoint) {result1.add (next);} else {result2.add (next);}}); assertTrue (result1.equals (Arrays.asList ("Pas", "Mačka", "Krava"))); assertTrue (result2.equals (Arrays.asList ("Bird", "Moose", "Pig"))); }

11. Split an Polje po duljini riječi

Dalje, podijelimo niz prema duljini riječi:

@Test javna praznina kadaSplitArrayByWordLength_thenConverted () {String [] životinje = novi niz [] {"Pas", "Mačka", "Ptica", "Krava", "Svinja", "Moose"}; Karta rezultat = Arrays.stream (životinje) .collect (Collectors.groupingBy (String :: length)); assertTrue (result.get (3) .equals (Arrays.asList ("Pas", "Mačka", "Krava", "Svinja"))); assertTrue (result.get (4) .equals (Arrays.asList ("Bird"))); assertTrue (result.get (5) .equals (Arrays.asList ("Moose"))); }

12. Split a Niz U Polje

Učinimo sada suprotno, podijelimo a Niz u an Niz:

@Test javna praznina whenConvertStringToArray_thenConverted () {String životinje = "Pas, Mačka, Ptica, Krava"; Niz [] rezultat = životinje.split (","); assertArrayEquals (rezultat, novi String [] {"Pas", "Mačka", "Ptica", "Krava"}); }

13. Split Niz U Kolekcija

Ovaj je primjer sličan prethodnom, postoji samo dodatni korak za pretvorbu Polje do a Kolekcija:

@Test public void whenConvertStringToCollection_thenConverted () {String životinje = "Pas, Mačka, Ptica, Krava"; Rezultat kolekcije = Arrays.asList (animals.split (",")); assertTrue (result.equals (Arrays.asList ("Pas", "Mačka", "Ptica", "Krava"))); }

14. Split a Niz U Karta

Ajmo sada stvoriti Karta od Niz. Morat ćemo podijeliti naš niz dva puta, jednom za svaki unos i posljednji put za ključ i vrijednosti:

@Test public void whenConvertStringToMap_thenConverted () {String životinje = "1 = Pas, 2 = Mačka, 3 = Ptica"; Rezultat karte = Arrays.stream (animals.split (",")). Map (next -> next.split ("=")) .collect (Collectors.toMap (entry -> Integer.parseInt (entry [0])) , unos -> unos [1])); assertEquals (result.get (1), "Pas"); assertEquals (result.get (2), "Cat"); assertEquals (result.get (3), "Bird"); }

15. Split String Ws višestrukim separatorima

Konačno, podijelimo a Niz koji ima više separatora pomoću regularnog izraza, uklonit ćemo i sve prazne rezultate:

@Test public void whenConvertCollectionToStringMultipleSeparators_thenConverted ().] ")) .Map (String :: trim) .filter (next ->! Next.isEmpty ()) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays) .asList ("Pas", "Mačka", "Ptica", "Krava"))); 

16. Zaključak

U ovom vodiču, koristeći jednostavno Niz.cijep funkcija i moćna Java 8 Stream, ilustrirali smo kako se pridružiti i podijeliti Nizovi i Zbirke.

Kôd za ovaj članak možete pronaći na GitHubu.