Java streamy pre začiatočníkov: Úvod do používania streamov v Jave

Java streamy pre začiatočníkov: Úvod do používania streamov v Jave

Streamy Java 8 umožňujú vývojárom extrahovať presné údaje z veľkej zbierky pomocou sady preddefinovaných operácií.





Pred vydaním Java 8 by bolo používanie výrazu „stream“ v jazyku Java automaticky spojené s I/O. Java 8 však predstavila stream, ktorý možno označiť ako súbor výpočtových krokov prepojených v reťazci, ktorý sa bežne označuje ako „stream pipeline“.





Tento článok vás zoznámi so streammi Java 8 a ukáže, ako môžu byť užitočné vo vašich projektoch.





Čo je to stream?

Stream je rozhranie Java, ktoré získava zdroj, vykonáva sadu operácií na extrahovanie konkrétnych údajov a potom ich poskytuje aplikácii na použitie. V zásade vám to umožňuje extrahovať špecializované údaje zo zbierky generalizovaných údajov.

Ako fungujú streamy

Potrubný kanál vždy začína zdrojom. Typ zdroja závisí od typu údajov, s ktorými pracujete, ale dve z obľúbenejších sú polia a zbierky.



Ak chcete kolekciu premeniť na počiatočný stream, budete musieť pridať Prúd() funkciu k zdroju. Tým sa zdroj umiestni do potrubia toku, kde prebieha niekoľko rôznych medziľahlých operácií (ako napr filter () a triediť () ) to môže operovať.

Keď sú vykonané všetky požadované medziľahlé operácie, môžete zaviesť koncovú operáciu (ako napr pre každý() ), ktorá bude produkovať predtým extrahované údaje zo zdroja.





Život bez prúdov

Java 8 bola vydaná v roku 2014, ale predtým vývojári Java potrebovali extrahovať špecializované údaje zo zbierky všeobecných údajov.

aplikácia na sledovanie filmov zadarmo v systéme Android

Povedzme, že máte zoznam náhodných znakov, ktoré sú kombinované s náhodnými číslami, aby vytvorili jedinečné hodnoty reťazcov, ale chcete iba hodnoty, ktoré začínajú znakom C, a chcete výsledok usporiadať vzostupne. Takto by ste mohli extrahovať tieto údaje bez streamov.





Súvisiace: Čo potrebujete vedieť o používaní reťazcov v Jave

Filtrovanie a triedenie hodnôt bez streamov Príklad


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

Budete tiež musieť deklarovať a inicializovať zoznam polí, či už používate streamy alebo iný spôsob extrakcie. To, čo by ste nemali robiť, ak ste používali streamy, je deklarácia novej premennej, ktorá bude uchovávať požadované hodnoty, ani vytváranie ďalších piatich plus riadkov kódu vo vyššie uvedenom príklade.

Súvisiace: Ako vytvárať a vykonávať operácie na poliach v Jave

Vyššie uvedený kód vytvára v konzole nasledujúci výstup:


C11
C12
C13
C14
C15
C16

Život s prúdmi

Pri programovaní efektivita hovorí o vytváraní rovnakého výsledku s výrazne menším počtom kódov. Presne to robí programátor stream stream. Nabudúce sa teda niekto pýta: prečo je vo vašom projekte dôležité používať toky? Jednoducho povedané: streamy podporujú efektívne programovanie.

Pokračovaním nášho vyššie uvedeného príkladu je to, ako zavedenie streamov transformuje celý program.

Filtrovanie a triedenie hodnôt pomocou príkladu streamu


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Vyššie uvedený kód ukazuje, aké výkonné je rozhranie streamu. Berie zoznam náhodných hodnôt poľa a transformuje ho na prúd pomocou súboru Prúd() funkciu. Stream sa potom zredukuje na zoznam polí, ktorý obsahuje požadované hodnoty (čo sú všetky hodnoty začínajúce na C. ) pomocou filter () funkciu.

Ako vidíte na vyššie uvedenom príklade, súbor C. hodnoty sú náhodne usporiadané v zozname polí. Ak by ste chceli prúd v tomto mieste potrubia vytlačiť, hodnota C15 budú vytlačené ako prvé. Preto sa triediť () do kanála toku je zavedená funkcia na usporiadanie nového poľa vo vzostupnom poradí.

Konečnou funkciou v toku údajov je a pre každý() funkciu. Toto je terminálová funkcia, ktorá sa používa na zastavenie toku dát a v konzole prináša nasledujúce výsledky:


C11
C12
C13
C14
C15
C16

Streamovanie medziľahlých operácií

Existuje rozsiahly zoznam medziľahlých operácií, ktoré je možné použiť v potrubí.

Streamovací kanál vždy začína jediným zdrojom a Prúd() funkcia a vždy končí jednou operáciou terminálu (aj keď je na výber niekoľko rôznych.) Medzi týmito dvoma časťami je však zoznam šiestich medziľahlých operácií, ktoré môžete použiť.

V našom prípade uvedenom vyššie sa používajú iba dve z týchto medziľahlých operácií --- filter () a triediť () . Medziľahlá operácia, ktorú si vyberiete, bude závisieť od úloh, ktoré chcete vykonať.

Ak by niektoré z hodnôt, ktoré začínajú na C v našom vyššie uvedenom zozname polí, boli malými písmenami a vykonali by sme s nimi rovnaké medziľahlé operácie, získali by sme nasledujúci výsledok.

Vykonávanie operácií filtrovania a triedenia na malých hodnotách Príklad


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

Vyššie uvedený kód vytvorí v konzole nasledujúce hodnoty:


C11
C12
C14
C15

Jediným problémom vyššie uvedeného výstupu je, že nereprezentuje presne všetky C. hodnoty v našom zozname polí. Dobrým spôsobom, ako opraviť túto malú chybu, je zavedenie ďalšej medziľahlej operácie do toku toku; táto operácia je známa ako mapa () funkciu.

Použitie príkladu funkcie mapy


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

The mapa () funkcia transformuje objekt z jedného stavu do druhého; v našom prípade vyššie transformuje všetky malé znaky v zozname polí na veľké písmená.

Umiestnenie mapa () fungovať tesne pred filter () funkcia načíta všetky hodnoty, ktoré začínajú na C. zo zoznamu polí.

Vyššie uvedený kód vytvára v konzole nasledujúci výsledok, ktorý úspešne predstavuje všetky C. hodnoty v zozname polí.


C11
C12
C13
C14
C15
C16

Medzi ďalšie tri medziľahlé operácie, ktoré môžete použiť vo svojich aplikáciách, patria:

  • nahliadnuť ()
  • limit ()
  • preskočiť ()

Streamy Java 8 uľahčujú tvorbu efektívneho kódu

So streammi Java 8 môžete extrahovať mimoriadne špecifické a relevantné údaje z veľkého zdroja s jedným riadkom kódu. Pokiaľ zahrniete začiatočné písmeno Prúd() a terminálového operátora, môžete použiť akúkoľvek kombináciu medziľahlých operácií, ktoré poskytujú vhodné výstupy pre váš cieľ.

čo sa dá robiť so siluetovým cameom

Ak vás zaujíma riadok kódu, ktorý je súčasťou nášho filter () funkcia; je známy ako „výraz lambda“. Lambda výrazy sú ďalšou funkciou zavedenou v jazyku Java 8 a obsahuje veľa nugetov, ktoré by vám mohli byť užitočné.

zdieľam zdieľam Tweet E -mail Rýchly úvod do Java 8 Lambdas

Ak ste programátorom Java a máte záujem dozvedieť sa viac o lambdach Java 8, v tomto článku sa bližšie pozrieme na syntax a používanie lambda.

Čítajte ďalej
Súvisiace témy
  • Programovanie
  • Java
  • Návody na kódovanie
O autorovi Kadeisha Kean(21 publikovaných článkov)

Kadeisha Kean je softvérový vývojár a technický/technologický spisovateľ. Má výraznú schopnosť zjednodušiť niektoré z najzložitejších technologických konceptov; produkovať materiál, ktorému každý technologický nováčik ľahko porozumie. Je nadšená písaním, vývojom zaujímavého softvéru a cestovaním po svete (prostredníctvom dokumentov).

Viac od Kadeisha Keana

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber