Arrays en verzamelingen samenvoegen en splitsen in Java

1. Overzicht

In deze korte tutorial leren we hoe je kunt deelnemen en splitsen Arrays en Collecties in Java, goed gebruik makend van de nieuwe stream-ondersteuning.

2. Doe mee met twee Arrays

Laten we beginnen met ons bij twee te voegen Arrays samen gebruiken Stream.concat:

@Test public void whenJoiningTwoArrays_thenJoined () {String [] animals1 = nieuwe String [] {"Dog", "Cat"}; String [] animals2 = nieuwe String [] {"Bird", "Cow"}; String [] resultaat = Stream.concat (Arrays.stream (dieren1), Arrays.stream (dieren2)). ToArray (String [] :: nieuw); assertArrayEquals (result, new String [] {"Dog", "Cat", "Bird", "Cow"}); }

3. Doe mee met twee Collecties

Laten we hetzelfde doen met twee Collecties:

@Test openbare leegte whenJoiningTwoCollections_thenJoined () {Collectie collection1 = Arrays.asList ("Hond", "Kat"); Collectie collection2 = Arrays.asList ("Bird", "Cow", "Moose"); Verzamelingsresultaat = Stream.concat (collection1.stream (), collection2.stream ()) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays.asList ("Dog", "Cat", "Bird", "Cow", "Moose"))); }

4. Doe mee met twee Collecties Wet Filter

Laten we er nu twee bijvoegen Collecties van getallen die iets groter dan 10 filteren:

@Test openbare leegte whenJoiningTwoCollectionsWithFilter_thenJoined () {Collectie collection1 = Arrays.asList ("Hond", "Kat"); Collectie collection2 = Arrays.asList ("Bird", "Cow", "Moose"); Verzamelingsresultaat = Stream.concat (collection1.stream (), collection2.stream ()) .filter (e -> e.length () == 3) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays.asList ("Dog", "Cat", "Cow"))); }

5. Word lid van een Array In een Draad

Laten we vervolgens een array samenvoegen in een Draad gebruik maken van een Verzamelaar:

@Test openbare leegte whenConvertArrayToString_thenConverted () {String [] dieren = nieuwe String [] {"Dog", "Cat", "Bird", "Cow"}; String resultaat = Arrays.stream (dieren) .collect (Collectors.joining (",")); assertEquals (resultaat, "Hond, Kat, Vogel, Koe"); }

6. Word lid van een Verzameling In een Draad

Laten we hetzelfde doen, maar met een Verzameling:

@Test openbare leegte whenConvertCollectionToString_thenConverted () {Verzameling dieren = Arrays.asList ("Hond", "Kat", "Vogel", "Koe"); String resultaat = animals.stream (). Collect (Collectors.joining (",")); assertEquals (resultaat, "Hond, Kat, Vogel, Koe"); }

7. Word lid van een Kaart In een Draad

Laten we vervolgens een Draad uit een Kaart.

Het proces lijkt erg op eerdere voorbeelden, maar hier hebben we een extra stap om als eerste lid te worden van elk KaartBinnenkomst:

@Test openbare leegte whenConvertMapToString_thenConverted () {Dieren in kaart brengen = nieuwe HashMap (); animals.put (1, "Hond"); animals.put (2, "Cat"); animals.put (3, "Koe"); String resultaat = animals.entrySet (). Stream () .map (entry -> entry.getKey () + "=" + entry.getValue ()) .collect (Collectors.joining (",")); assertEquals (resultaat, "1 = hond, 2 = kat, 3 = koe"); }

8. Word lid van genest Collecties In een Draad

Laten we iets ingewikkelder doen. Laten we meedoen met een aantal geneste Collecties in een Draad.

In het volgende voorbeeld voegen we ons eerst toe binnen elke geneste verzameling en daarna voegen we het resultaat van elk van hen samen:

@Test openbare leegte whenConvertNestedCollectionToString_thenConverted () {Collectie genest = nieuwe ArrayList (); nested.add (Arrays.asList ("Dog", "Cat")); genest.add (Arrays.asList ("Koe", "Varken")); String resultaat = nested.stream (). Map (nextList -> nextList.stream () .collect (Collectors.joining ("-"))) .collect (Collectors.joining (";")); assertEquals (resultaat, "Dog-Cat; Cow-Pig"); }

9. Handvat Nul Waarden bij deelname

Laten we niet eens kijken hoe we een Filter om ze over te slaan nul waarden:

@Test openbare leegte whenConvertCollectionToStringAndSkipNull_thenConverted () {Verzameling dieren = Arrays.asList ("Hond", "Kat", null, "Moose"); String resultaat = animals.stream () .filter (Objects :: nonNull) .collect (Collectors.joining (",")); assertEquals (resultaat, "Dog, Cat, Moose"); }

10. Splits een Verzameling in tweeën

Laten we een Verzameling van getallen in twee Collecties in het midden:

@Test openbare leegte whenSplitCollectionHalf_thenConverted () {Verzameling dieren = Arrays.asList ("Hond", "Kat", "Koe", "Vogel", "Moose", "Varken"); Verzamelingsresultaat1 = nieuwe ArrayList (); Verzamelingsresultaat2 = nieuwe ArrayList (); AtomicInteger count = nieuwe AtomicInteger (); int middelpunt = Math.round (animals.size () / 2); dieren.forEach (volgende -> {int index = count.getAndIncrement (); if (index <middelpunt) {resultaat1.add (volgende);} anders {resultaat2.add (volgende);}}); assertTrue (result1.equals (Arrays.asList ("Dog", "Cat", "Cow"))); assertTrue (result2.equals (Arrays.asList ("Bird", "Moose", "Pig"))); }

11. Splits een Array op woordlengte

Laten we vervolgens een array splitsen op basis van de lengte van de woorden:

@Test openbare leegte whenSplitArrayByWordLength_thenConverted () {String [] dieren = nieuwe String [] {"Hond", "Kat", "Vogel", "Koe", "Varken", "Moose"}; Kaart resultaat = Arrays.stream (dieren) .collect (Collectors.groupingBy (String :: lengte)); assertTrue (result.get (3) .equals (Arrays.asList ("Dog", "Cat", "Cow", "Pig"))); assertTrue (result.get (4) .equals (Arrays.asList ("Bird"))); assertTrue (result.get (5) .equals (Arrays.asList ("Moose"))); }

12. Splits een Draad In een Array

Laten we nu het tegenovergestelde doen, laten we een splitsen Draad in een Matrix:

@Test public void whenConvertStringToArray_thenConverted () {String animals = "Hond, kat, vogel, koe"; String [] resultaat = dieren.split (","); assertArrayEquals (result, new String [] {"Dog", "Cat", "Bird", "Cow"}); }

13. Splitsen Draad In een Verzameling

Dit voorbeeld is vergelijkbaar met het vorige, er is alleen een extra stap om van te converteren Array naar een Verzameling:

@Test public void whenConvertStringToCollection_thenConverted () {String animals = "Hond, kat, vogel, koe"; Verzamelingsresultaat = Arrays.asList (animals.split (",")); assertTrue (result.equals (Arrays.asList ("Dog", "Cat", "Bird", "Cow"))); }

14. Splits een Draad In een Kaart

Laten we nu een Kaart van een Draad. We zullen onze string twee keer moeten splitsen, een keer voor elk item en een laatste keer voor de sleutel en waarden:

@Test public void whenConvertStringToMap_thenConverted () {String animals = "1 = Hond, 2 = Kat, 3 = Vogel"; Kaartresultaat = Arrays.stream (animals.split (",")). Map (next -> next.split ("=")) .collect (Collectors.toMap (entry -> Integer.parseInt (entry [0]) , entry -> entry [1])); assertEquals (result.get (1), "Dog"); assertEquals (result.get (2), "Cat"); assertEquals (result.get (3), "Bird"); }

15. Splitsen Tekenreeks Wet meerdere scheidingstekens

Laten we tot slot een Draad die meerdere scheidingstekens heeft met een reguliere expressie, zullen we ook eventuele lege resultaten verwijderen:

@Test public void whenConvertCollectionToStringMultipleSeparators_thenConverted ().] ")) .Map (String :: trim) .filter (volgende ->! Next.isEmpty ()) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays .asList ("Hond", "Kat", "Vogel", "Koe"))); 

16. Conclusie

Maak in deze tutorial gebruik van het simpele String.split functie en de krachtige Java 8 Stroom, we hebben geïllustreerd hoe je kunt aansluiten en splitsen Arrays en Collecties.

Je kunt de code voor dit artikel vinden op GitHub.