Karakterlánc-műveletek Java-streamekkel

1. Áttekintés

A Java 8 bemutatott egy újat Folyam API, amely lehetővé teszi számunkra az adatok deklaratív feldolgozását.

Ebben a rövid cikkben megtanuljuk a Folyam API vesszővel elválasztva Húr listájába Húrok és hogyan lehet csatlakozni a Húr tömb vesszővel elválasztva Húr.

Megvizsgáljuk azt is, hogyan lehet egy string tömböt térképpé konvertálni Folyam API.

Szinte mindig olyan helyzetekkel szembesülünk, ahol meg kell ismételnünk néhányat Java gyűjtemények és leszűrjük a Gyűjtemény valamilyen szűrési logika alapján. Az ilyen típusú helyzetek hagyományos megközelítésében sok hurkot és if-else műveletet használnánk a kívánt eredmény eléréséhez.

Ha többet szeretne megtudni a Folyam API, ellenőrizze ezt a cikket.

2. Húrok összekapcsolása a Folyam API

Használjuk a Folyam API egy függvény létrehozásához, amely csatlakozik a Húr tömb vesszővel elválasztva Húr:

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

Itt érdemes megjegyezni:

  • A folyam() függvény bármelyiket átalakít Gyűjtemény adatfolyamba
  • térkép() függvény az adatok feldolgozására szolgál
  • Van egy másik funkció is, a neve szűrő(), ahol szűrési feltételeket is felvehetünk

Lehetnek olyan forgatókönyvek, ahol érdemes csatlakozni a Húr néhány fix előtaggal és utótaggal. A ... val Folyam API-t a következő módon tehetjük meg:

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

Mint láthatjuk a Collectors.joining () módszerrel deklaráljuk az előtagunkat ‘[‘ és postfix as ‘]'; ezért a generált Húr deklaráltval jön létre […..] formátum.

3. Hasadás Húrok Val vel Folyam API

Most hozzunk létre egy függvényt, amely elválasztja a vesszőt Húr listájába Húr felhasználásával Folyam API:

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

A. Konvertálása is lehetséges Húr a karakter listát a Folyam API:

public static List splitToListOfChar (String str) {return str.chars () .mapToObj (item -> (char) item) .collect (Collectors.toList ()); }

Egy érdekes tény, amit itt meg kell jegyezni, hogy a karakterek () módszer konvertálja a Húr folyamába Egész szám ahol mindegyik Egész szám érték az ASCII minden egyes értéke Char sorrend. Ezért kifejezetten be kell írnunk a mapper objektumot a mapToObj () módszer.

4. Húr Tömb ide: Térkép Val vel Folyam API

Átalakíthatjuk a Húr tömb a leképezéshez hasított és Gyűjtők.térképbe, feltéve, hogy a tömb minden eleme tartalmaz egy elválasztóval összefűzött kulcsérték-entitást:

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

Itt, “:” a String tömb összes elemének kulcsérték-elválasztója.

Ne feledje, hogy a fordítási hibák elkerülése érdekében meg kell győződnünk arról, hogy a kódot a Java 1.8 segítségével fordították le. Ehhez hozzá kell adnunk a következő plugint a pom.xml:

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

5. Tesztelés

Mivel elkészültünk a függvényekkel, hozzunk létre teszteseteket az eredmény igazolására.

Először teszteljük egyszerű csatlakozási módszerünket:

@Test public void givenArray_transformedToStream_convertToString () {String [] programozási nyelvek = {"java", "python", "nodejs", "ruby"}; Karakterlánc-elvárás = "java, python, nodejs, ruby"; Karakterlánc eredménye = JoinerSplitter.join (programozási nyelvek); assertEquals (eredmény, várakozás); }

Ezután hozzunk létre egy másikat az egyszerű felosztási funkció teszteléséhez:

@Test public void givenString_transformedToStream_convertToList () {String programmingLanguages ​​= "java, python, nodejs, ruby"; Lista várakozása = new ArrayList (); várakozás.add ("java"); várakozás.add ("python"); várakozás.add ("nodejs"); várakozás.add ("rubin"); Lista eredménye = JoinerSplitter.split (programozási nyelvek); assertEquals (eredmény, várakozás); }

Végül teszteljük Húr tömb a térképre funkcionalitás:

@Test public void givenStringArray_transformedToStream_convertToMap () {String [] programozási_nyelv = új String [] {"nyelv: java", "os: linux", "editor: emacs"}; Térkép elvárás = új HashMap (); várakozás.put ("nyelv", "java"); várakozás.put ("os", "linux"); várakozás.put ("szerkesztő", "emacs"); Térkép eredménye = JoinerSplitter.arrayToMap (programozási_nyelvek); assertEquals (eredmény, várakozás); }

Ugyanígy létre kell hoznunk a többi tesztesetet is.

6. Következtetés

Folyam Az API kifinomult adatfeldolgozási technikákat biztosít számunkra. A kódírás ezen új módja nagyon hatékony a halom memóriakezelés szempontjából egy több szálat tartalmazó környezetben.

Mint mindig, a teljes forráskód is elérhető a Githubon.