Strengoperasjoner med Java Streams

1. Oversikt

Java 8 har introdusert en ny Strøm API som lar oss behandle data på en deklarativ måte.

I denne raske artikkelen vil vi lære hvordan du bruker Strøm API for å dele kommaseparert String inn i en liste over Strenger og hvordan bli med i String rekke i kommaseparert String.

Vi vil også se på hvordan du konverterer en strengmatrise til kart ved hjelp av Strøm API.

Nesten hele tiden møter vi situasjoner der vi trenger å gjenta noen Java-samlinger og filtrer Samling basert på noe filtreringslogikk. I en tradisjonell tilnærming for denne typen situasjoner, ville vi bruke mange sløyfer og hvis ikke-operasjoner for å oppnå ønsket resultat.

Hvis du vil lese mer om Strøm API, sjekk denne artikkelen.

2. Bli med i strenger med Strøm API

La oss bruke Strøm API for å opprette en funksjon som vil bli med i en String rekke i kommaseparert String:

public static String join (String [] arrayOfString) {return Arrays.asList (arrayOfString) .stream () //. map (...) .collect (Collectors.joining (",")); }

Poeng å merke seg her:

  • De strøm() funksjon konverterer hvilken som helst Samling inn i en datastrøm
  • kart() funksjonen brukes til å behandle dataene
  • Det er også en annen funksjon, som heter filter(), der vi kan inkludere filtreringskriterier

Det kan være scenarier der vi kanskje vil bli med i String med noe fast prefiks og postfiks. Med Strøm API kan vi gjøre det på følgende måte:

offentlig statisk streng joinWithPrefixPostfix (String [] arrayOfString) {return Arrays.asList (arrayOfString) .stream () //. map (...) .collect (Collectors.joining (",", "[", "]") ); }

Som vi kan se i Collectors.joining () metode erklærer vi prefikset vårt som ‘[‘ og postfix som ‘]'; derav generert String vil bli opprettet med erklært […..] format.

3. Splitting Strenger Med Strøm API

La oss nå lage en funksjon som vil dele et kommaseparert String inn i en liste over String ved hjelp av Strøm API:

offentlig statisk List split (String str) {return Stream.of (str.split (",")) .map (elem -> new String (elem)) .collect (Collectors.toList ()); }

Det er også mulig å konvertere en direkte String til en Karakter listen ved hjelp av Strøm API:

offentlig statisk liste splitToListOfChar (String str) {return str.chars () .mapToObj (item -> (char) item) .collect (Collectors.toList ()); }

Et interessant faktum å merke seg her er at tegn () metoden konverterer String inn i en strøm av Heltall hvor hver Heltall verdi betegner ASCII verdien av hver eneste Char sekvens. Det er derfor vi trenger å eksplisitt kartlegge kartleggerobjektet i mapToObj () metode.

4. String Array til Kart Med Strøm API

Vi kan også konvertere en String array å kartlegge ved hjelp av dele og Collectors.toMap, forutsatt at hvert element i matrisen inneholder en nøkkelverdienhet sammenkoblet av en separator:

offentlig statisk Map arrayToMap (String [] arrayOfString) {return Arrays.asList (arrayOfString) .stream () .map (str -> str.split (":")) .collect (toMap (str -> str [0], str -> str [1])); }

Her, “:” er nøkkelverdiseparatoren for alle elementene i strengmatrisen.

Husk at for å unngå kompileringsfeil, må vi sørge for at koden blir kompilert ved hjelp av Java 1.8. For å gjøre dette må vi legge til følgende plugin i pom.xml:

   org.apache.maven.plugins maven-compiler-plugin 3.3 1.8 1.8 

5. Testing

Siden vi er ferdige med å lage funksjonene, la oss lage testtilfeller for å verifisere resultatet.

Først, la oss teste vår enkle sammenføyningsmetode:

@Test offentlig ugyldighet givenArray_transformedToStream_convertToString () {String [] programmingLanguages ​​= {"java", "python", "nodejs", "ruby"}; Streng forventning = "java, python, nodejs, ruby"; Strengresultat = JoinerSplitter.join (programmeringLanguages); assertEquals (resultat, forventning); }

La oss deretter lage en til for å teste vår enkle splittingsfunksjonalitet:

@Test offentlig ugyldighet givenString_transformedToStream_convertToList () {String programmingLanguages ​​= "java, python, nodejs, ruby"; Listeforventning = ny ArrayList (); expectation.add ("java"); expectation.add ("python"); expectation.add ("nodejs"); expectation.add ("ruby"); Listresultat = JoinerSplitter.split (programmeringLanguages); assertEquals (resultat, forventning); }

Til slutt, la oss teste vår String array to map funksjonalitet:

@Test offentlig ugyldighet gittStringArray_transformedToStream_convertToMap () {String [] programming_languages ​​= new String [] {"språk: java", "os: linux", "editor: emacs"}; Kartforventning = ny HashMap (); expectation.put ("språk", "java"); expectation.put ("os", "linux"); expectation.put ("editor", "emacs"); Kartresultat = JoinerSplitter.arrayToMap (programmering_språk); assertEquals (resultat, forventning); }

På samme måte trenger vi å lage resten av testsakene.

6. Konklusjon

Strøm API gir oss sofistikerte databehandlingsteknikker. Denne nye måten å skrive kode på er veldig effektiv når det gjelder administrasjon av heapminne i et miljø med flere tråder.

Som alltid er hele kildekoden tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found