Deltag og del arrays og samlinger i Java

1. Oversigt

I denne hurtige vejledning lærer vi, hvordan du deltager og deler Arrays og Samlinger i Java, hvilket gør god brug af den nye streamsupport.

2. Deltag i to Arrays

Lad os starte med at slutte os til to Arrays sammen ved hjælp af Stream.concat:

@Test offentligt ugyldigt nårJoiningTwoArrays_thenJoined () {String [] animals1 = new String [] {"Dog", "Cat"}; String [] animals2 = new String [] {"Bird", "Cow"}; String [] result = Stream.concat (Arrays.stream (animals1), Arrays.stream (animals2)). ToArray (String [] :: new); assertArrayEquals (resultat, ny streng [] {"Hund", "Kat", "Fugl", "Ko"}); }

3. Deltag i to Samlinger

Lad os gøre det samme sammen med to Samlinger:

@Test offentlig ugyldig nårJoiningTwoCollections_thenJoined () {Collection collection1 = Arrays.asList ("Dog", "Cat"); Collection collection2 = Arrays.asList ("Bird", "Cow", "Moose"); Samlingsresultat = Stream.concat (collection1.stream (), collection2.stream ()) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays.asList ("Dog", "Cat", "Bird", "Cow", "Moose")); }

4. Deltag i to Samlinger Wmed Filter

Lad os nu slutte os til to Samlinger af numre, der filtrerer noget større end 10:

@Test offentlig ugyldigt nårJoiningTwoCollectionsWithFilter_thenJoined () {Collection collection1 = Arrays.asList ("Dog", "Cat"); Collection collection2 = Arrays.asList ("Bird", "Cow", "Moose"); Samlingsresultat = Stream.concat (collection1.stream (), collection2.stream ()). Filter (e -> e.length () == 3) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays.asList ("Dog", "Cat", "Cow")); }

5. Deltag i en Array Ind i en Snor

Lad os derefter slutte os til en Array i en Snor ved hjælp af en Samler:

@Test offentlig ugyldig nårConvertArrayToString_thenConverted () {String [] animals = new String [] {"Dog", "Cat", "Bird", "Cow"}; String result = Arrays.stream (animals) .collect (Collectors.joining (",")); assertEquals (resultat, "Hund, kat, fugl, ko"); }

6. Deltag i en Kollektion Ind i en Snor

Lad os gøre det samme, men med en Kollektion:

@Test offentligt ugyldigt nårConvertCollectionToString_thenConverted () {Collection animals = Arrays.asList ("Dog", "Cat", "Bird", "Cow"); Strengresultat = animals.stream (). Collect (Collectors.joining (",")); assertEquals (resultat, "Hund, kat, fugl, ko"); }

7. Deltag i en Kort Ind i en Snor

Lad os derefter oprette en Snor ud af en Kort.

Processen ligner meget på tidligere eksempler, men her har vi et ekstra trin til først at deltage i hver KortIndgang:

@Test offentlig ugyldig nårConvertMapToString_thenConverted () {Kortdyr = nyt HashMap (); animals.put (1, "Hund"); animals.put (2, "Cat"); animals.put (3, "ko"); Strengresultat = animals.entrySet (). Stream () .map (post -> entry.getKey () + "=" + entry.getValue ()) .collect (Collectors.joining (",")); assertEquals (resultat, "1 = Hund, 2 = Kat, 3 = Ko"); }

8. Deltag i Nested Samlinger Ind i en Snor

Lad os gøre noget lidt mere komplekst. Lad os slutte os til nogle indlejrede Samlinger ind i en Snor.

I det følgende eksempel deltager vi først inden for hver nestet samling, og derefter slutter vi os til resultatet af hver af dem:

@Test offentlig ugyldig nårConvertNestedCollectionToString_thenConverted () {Collection indlejret = ny ArrayList (); nested.add (Arrays.asList ("Hund", "Kat")); nested.add (Arrays.asList ("Ko", "Gris")); String result = nested.stream (). Map (nextList -> nextList.stream () .collect (Collectors.joining ("-"))) .collect (Collectors.joining (";")); assertEquals (resultat, "Dog-Cat; Cow-Pig"); }

9. Håndtag Nul Værdier ved tilmelding

Lad os se, hvordan vi kan bruge en Filter at springe nogen over nul værdier:

@Test offentlig ugyldig nårConvertCollectionToStringAndSkipNull_thenConverted () {Collection animals = Arrays.asList ("Dog", "Cat", null, "Moose"); String result = animals.stream () .filter (Objects :: nonNull) .collect (Collectors.joining (",")); assertEquals (resultat, "Hund, kat, elg"); }

10. Opdel en Kollektion i to

Lad os dele en Kollektion af tal i to Samlinger i midten:

@Test offentligt ugyldigt nårSplitCollectionHalf_thenConverted () {Collection Animals = Arrays.asList ("Dog", "Cat", "Cow", "Bird", "Moose", "Pig"); Samlingsresultat1 = ny ArrayList (); Samlingsresultat2 = ny ArrayList (); AtomicInteger count = new AtomicInteger (); int midtpunkt = Math.round (animals.størrelse () / 2); animals.forEach (next -> {int index = count.getAndIncrement (); if (index <midpoint) {result1.add (next);} else {result2.add (next);}}); assertTrue (result1.equals (Arrays.asList ("Dog", "Cat", "Cow")); assertTrue (result2.equals (Arrays.asList ("Bird", "Moose", "Pig")); }

11. Opdel en Array efter ordlængde

Lad os derefter opdele en matrix efter længden af ​​ordene:

@Test offentligt ugyldigt nårSplitArrayByWordLength_thenConverted () {String [] animals = new String [] {"Dog", "Cat", "Bird", "Cow", "Pig", "Moose"}; Kort resultat = Arrays.stream (dyr) .collect (Collectors.groupingBy (String :: længde)); 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. Opdel en Snor I en Array

Lad os nu gøre det modsatte, lad os dele en Snor ind i en Array:

@Test offentligt ugyldigt nårConvertStringToArray_thenConverted () {Strengdyr = "Hund, kat, fugl, ko"; Streng [] resultat = animals.split (","); assertArrayEquals (resultat, ny streng [] {"Hund", "Kat", "Fugl", "Ko"}); }

13. Split Snor Ind i en Kollektion

Dette eksempel svarer til det foregående, der er bare et ekstra trin at konvertere fra Array til en Kollektion:

@Test offentligt ugyldigt nårConvertStringToCollection_thenConverted () {Strengdyr = "Hund, kat, fugl, ko"; Samlingsresultat = Arrays.asList (animals.split (",")); assertTrue (result.equals (Arrays.asList ("Dog", "Cat", "Bird", "Cow")); }

14. Opdel en Snor Ind i en Kort

Lad os nu oprette en Kort fra en Snor. Vi bliver nødt til at dele vores streng to gange, en gang for hver post og en sidste gang for nøglen og værdierne:

@Test offentligt ugyldigt nårConvertStringToMap_thenConverted () {Strengdyr = "1 = Hund, 2 = Kat, 3 = Fugl"; Kortresultat = Arrays.stream (animals.split (",")). Kort (næste -> næste.split ("=")) .collect (Collectors.toMap (post -> Integer.parseInt (post [0]) , post -> post [1])); assertEquals (result.get (1), "Dog"); assertEquals (result.get (2), "Cat"); assertEquals (result.get (3), "Bird"); }

15. Split String Wmed flere separatorer

Lad os endelig dele en Snor der har flere separatorer ved hjælp af et regulært udtryk, fjerner vi også eventuelle tomme resultater:

@Test offentlig ugyldig nårConvertCollectionToStringMultipleSeparators_thenConverted ().] ")) .Map (String :: trim). Filter (next ->! Next.isEmpty ()) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays) .asList ("Hund", "Kat", "Fugl", "Ko"))); 

16. Konklusion

I denne vejledning udnytter du det enkle String.split funktion og den kraftfulde Java 8 Strøm, vi illustrerede, hvordan man kan deltage og splitte Arrays og Samlinger.

Du kan finde koden til denne artikel på GitHub.