Reťazcové operácie s tokmi Java

1. Prehľad

Java 8 predstavila novú Prúd API, ktoré nám umožňuje spracovávať údaje deklaratívnym spôsobom.

V tomto rýchlom článku by sme sa dozvedeli, ako používať Prúd API na rozdelenie oddelené čiarkou String do zoznamu Struny a ako sa pridať k String pole do čiarky String.

Ďalej sa pozrieme na to, ako pomocou reťazca prevádzať reťazcové pole na mapu Prúd API.

Takmer vždy sa stretávame so situáciami, keď je potrebné niektoré zopakovať Zbierky Java a prefiltrujte Zbierka na základe nejakej logiky filtrovania. V tradičnom prístupe k tomuto typu situácie by sme na získanie požadovaného výsledku použili veľa cyklov a operácií typu „ak-iné“.

Ak si chcete prečítať viac o Prúd API, pozrite si tento článok.

2. Spojenie strún s Prúd API

Použime Prúd API na vytvorenie funkcie, ktorá by sa pripojila k String pole do čiarky String:

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

Tu je potrebné poznamenať:

  • The Prúd() funkcia prevádza ľubovoľné Zbierka do toku dát
  • mapa () Na spracovanie údajov sa používa funkcia
  • Existuje aj iná funkcia s názvom filter (), kde môžeme zahrnúť filtračné kritériá

Môžu existovať scenáre, keď sa možno budeme chcieť pridať k a String s nejakou pevnou predponou a postfixom. Vďaka Prúd API to môžeme urobiť nasledujúcim spôsobom:

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

Ako vidíme na Collectors.joining () metódy deklarujeme svoju predponu ako ‘[‘ a postfix ako ‘]'; teda vygenerovaný String sa vytvorí s deklarovaným […..] formát.

3. Štiepanie Struny S Prúd API

Teraz vytvorme funkciu, ktorá by rozdelila čiarku oddelenú String do zoznamu String použitím Prúd API:

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

Je tiež možné priamo konvertovať a String do a Postava zoznam pomocou Prúd API:

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

Tu je potrebné poznamenať jednu zaujímavú skutočnosť znaky () metóda prevádza String do prúdu Celé číslo kde každý Celé číslo hodnota označuje ASCII hodnota každého jedného Char postupnosť. Preto musíme explicitne obsadiť objekt mapovača v mapToObj () metóda.

4. String Array to Mapa S Prúd API

Môžeme tiež previesť a String pole na mapovanie pomocou rozdeliť a Collectors.toMap, za predpokladu, že každá položka v poli obsahuje entitu kľúč - hodnota zreťazenú separátorom:

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

Tu, “:” je oddeľovač párov kľúč - hodnota pre všetky prvky v poli String.

Pamätajte, že aby sme sa vyhli chybe kompilácie, musíme sa ubezpečiť, že kód je kompilovaný pomocou Java 1.8. Aby sme to dosiahli, musíme do aplikácie pridať nasledujúci doplnok pom.xml:

   org.apache.maven.plugins maven-compiler-plugin 3,3 1,8 1,8 

5. Testovanie

Pretože sme vytváranie funkcií skončili, vytvorme testovacie prípady na overenie výsledku.

Najprv otestujme našu jednoduchú metódu spájania:

@Test public void givenArray_transformedToStream_convertToString () {String [] programmingLanguages ​​= {"java", "python", "nodejs", "ruby"}; Očakávanie reťazca = "java, python, nodejs, ruby"; Výsledok reťazca = JoinerSplitter.join (programmingLanguages); assertEquals (výsledok, očakávanie); }

Ďalej vytvoríme ďalší, ktorý otestuje našu jednoduchú funkčnosť rozdelenia:

@Test public void givenString_transformedToStream_convertToList () {String programmingLanguages ​​= "java, python, nodejs, ruby"; Očakávanie zoznamu = nový ArrayList (); expectation.add ("java"); expectation.add ("python"); expectation.add ("nodejs"); expectation.add ("rubín"); Výsledok zoznamu = JoinerSplitter.split (programmingLanguages); assertEquals (výsledok, očakávanie); }

Nakoniec si otestujme naše String funkčnosť poľa na mapu:

@Test public void givenStringArray_transformedToStream_convertToMap () {String [] programovanie_languages ​​= nový String [] {"jazyk: java", "os: linux", "editor: emacs"}; Očakávanie mapy = nová HashMap (); expectation.put ("jazyk", "java"); expectation.put ("os", "linux"); expectation.put ("editor", "emacs"); Výsledok mapy = JoinerSplitter.arrayToMap (programovacie_jazyky); assertEquals (výsledok, očakávanie); }

Rovnakým spôsobom musíme vytvoriť aj zvyšok testovacích prípadov.

6. Záver

Prúd API nám poskytuje sofistikované techniky spracovania údajov. Tento nový spôsob zápisu kódu je veľmi efektívny z hľadiska správy haldy pamäte v prostredí s viacerými vláknami.

Celý zdrojový kód je ako vždy k dispozícii na stránkach Github.