Bli med og del arrays og samlinger i Java
1. Oversikt
I denne raske opplæringen lærer vi hvordan vi kan bli med og dele oss Arrays og Samlinger i Java, og utnytter den nye strømstøtten godt.
2. Bli med to Arrays
La oss begynne med å bli med to Arrays sammen ved hjelp av Stream.concat:
@Test offentlig ugyldig 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 [] {"Dog", "Cat", "Bird", "Cow"}); }
3. Bli med to Samlinger
La oss gjøre det samme bli med to Samlinger:
@Test public void whenJoiningTwoCollections_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. Bli med to Samlinger Wmed Filter
La oss bli med to Samlinger av tall som filtrerer noe større enn 10:
@Test offentlig ugyldig 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. Bli med på en Array Inn i en String
Deretter, la oss bli med i en serie til en String bruker 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, katt, fugl, ku"); }
6. Bli med a Samling Inn i en String
La oss gjøre det samme, men med en Samling:
@Test offentlig ugyldig nårConvertCollectionToString_thenConverted () {Collection animals = Arrays.asList ("Dog", "Cat", "Bird", "Cow"); Strengresultat = animals.stream (). Collect (Collectors.joining (",")); assertEquals (resultat, "Hund, katt, fugl, ku"); }
7. Bli med a Kart Inn i en String
La oss deretter lage en String ut av en Kart.
Prosessen er veldig lik tidligere eksempler, men her har vi et ekstra trinn for først å bli med hver KartInngang:
@Test offentlig ugyldig nårConvertMapToString_thenConverted () {Map animals = new HashMap (); animals.put (1, "Dog"); animals.put (2, "Cat"); animals.put (3, "Cow"); Strengresultat = animals.entrySet (). Stream () .map (entry -> entry.getKey () + "=" + entry.getValue ()) .collect (Collectors.joining (",")); assertEquals (resultat, "1 = Dog, 2 = Cat, 3 = Cow"); }
8. Bli med Nested Samlinger Inn i en String
La oss gjøre noe mer komplisert. La oss bli med noen nestede Samlinger inn i en String.
I det følgende eksemplet blir vi først med i hver nestede samling, og deretter blir vi med i resultatet av hver av dem:
@Test offentlig ugyldig nårConvertNestedCollectionToString_thenConverted () {Collection nestet = ny ArrayList (); nestet.add (Arrays.asList ("Dog", "Cat")); nestet.add (Arrays.asList ("Cow", "Pig")); Strengresultat = nestet.stream (). Kart (nextList -> nextList.stream () .collect (Collectors.joining ("-"))) .collect (Collectors.joining (";")); assertEquals (resultat, "Dog-Cat; Cow-Pig"); }
9. Håndtak Null Verdier når du blir med
La oss se hvordan vi kan bruke en Filter å hoppe over noen null verdier:
@Test offentlig ugyldig nårConvertCollectionToStringAndSkipNull_thenConverted () {Collection animals = Arrays.asList ("Dog", "Cat", null, "Moose"); Strengresultat = animals.stream () .filter (Objects :: nonNull) .collect (Collectors.joining (",")); assertEquals (resultat, "Dog, Cat, Moose"); }
10. Del en Samling i to
La oss dele en Samling av tall i to Samlinger i midten:
@Test offentlig ugyldig 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.size () / 2); animals.forEach (neste -> {int indeks = count.getAndIncrement (); hvis (indeks <midtpunkt) {resultat1.add (neste);} annet {result2.add (neste);}}); assertTrue (result1.equals (Arrays.asList ("Dog", "Cat", "Cow")); assertTrue (result2.equals (Arrays.asList ("Bird", "Moose", "Pig"))); }
11. Del en Array etter Word Length
Deretter la oss dele en matrise etter lengden på ordene:
@Test offentlig ugyldig nårSplitArrayByWordLength_thenConverted () {String [] animals = new String [] {"Dog", "Cat", "Bird", "Cow", "Pig", "Moose"}; Kart resultat = Arrays.stream (dyr) .collect (Collectors.groupingBy (String :: lengde)); 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. Del en String Inn i en Array
La oss nå gjøre det motsatte, la oss dele en String inn i en Array:
@Test offentlig ugyldig nårConvertStringToArray_thenConverted () {Strengdyr = "Hund, katt, fugl, ku"; Streng [] resultat = animals.split (","); assertArrayEquals (resultat, ny streng [] {"Dog", "Cat", "Bird", "Cow"}); }
13. Split String Inn i en Samling
Dette eksemplet ligner på det forrige, det er bare et ekstra trinn å konvertere fra Array til en Samling:
@Test offentlig ugyldig nårConvertStringToCollection_thenConverted () {Strengdyr = "Hund, katt, fugl, ku"; Samlingsresultat = Arrays.asList (animals.split (",")); assertTrue (result.equals (Arrays.asList ("Dog", "Cat", "Bird", "Cow")); }
14. Del en String Inn i en Kart
La oss nå lage en Kart fra en String. Vi må dele strengen vår to ganger, en gang for hver oppføring, og en siste gang for nøkkelen og verdiene:
@Test offentlig ugyldig nårConvertStringToMap_thenConverted () {Strengdyr = "1 = Hund, 2 = Katt, 3 = Fugl"; Kartresultat = Arrays.stream (animals.split (",")). Kart (neste -> next.split ("=")) .collect (Collectors.toMap (oppføring -> Integer.parseInt (oppføring [0])) , oppføring -> oppføring [1])); assertEquals (result.get (1), "Dog"); assertEquals (result.get (2), "Cat"); assertEquals (result.get (3), "Bird"); }
15. Split String Wmed flere separatorer
Til slutt, la oss dele en String som har flere skilletegn ved å bruke et vanlig uttrykk, vil vi også fjerne eventuelle tomme resultater:
@Test offentlig ugyldig nårConvertCollectionToStringMultipleSeparators_thenConverted ().] ")) .Map (String :: trim). Filter (next ->! Next.isEmpty ()) .collect (Collectors.toList ()); assertTrue (result.equals (Arrays) .asList ("Dog", "Cat", "Bird", "Cow")));
16. Konklusjon
I denne opplæringen utnytter du det enkle String.split funksjon og den kraftige Java 8 Strøm, vi illustrerte hvordan man kan bli med og dele Arrays og Samlinger.
Du kan finne koden for denne artikkelen på GitHub.