Java 8 streamovi omogućuju programerima da izvuku precizne podatke iz velike zbirke, koristeći skup unaprijed definiranih operacija.

Prije izdavanja Jave 8, upotreba izraza "stream" u Javi automatski bi bila povezana s I / O. Međutim, Java 8 predstavila je tok koji se može nazvati skupom računskih koraka ulančanih u ono što se obično naziva "cjevovodom toka".

Ovaj će vas članak upoznati s Java 8 streamovima i pokazati kako mogu biti korisni u vašim projektima.

Što je tok?

Potok je Java sučelje koje uzima izvor, provodi niz operacija za izdvajanje određenih podataka, a zatim te podatke pruža aplikaciji na upotrebu. U osnovi, omogućuje vam izdvajanje specijaliziranih podataka iz zbirke generaliziranih podataka.

Kako tokovi rade

Struja cjevovoda uvijek započinje s izvorom. Vrsta izvora ovisi o vrsti podataka s kojima imate posla, ali dva najpopularnija su nizovi i zbirke.

Da biste zbirku transformirali u početni tok, morat ćete dodati stream () funkcija izvoru. To će izvor smjestiti u cjevovod za tok, gdje se odvija nekoliko različitih posrednih operacija (poput

instagram viewer
filtar() i vrsta()) mogu ga operirati.

Nakon što se izvrše sve potrebne međuprodukcije, možete uvesti operaciju terminala (kao što je za svakoga()), koji će proizvesti prethodno izvučene podatke iz izvora.

Život bez potoka

Java 8 objavljena je 2014. godine, ali prije toga programeri Jave još su trebali izvući specijalizirane podatke iz zbirke općih podataka.

Recimo da imate popis slučajnih znakova koji se kombiniraju sa slučajnim brojevima da bi se stvorile jedinstvene vrijednosti niza, ali želite samo vrijednosti koje počinju znakom "C", a rezultat želite poredati uzlazno narudžba. Tako biste izvukli te podatke bez strujanja.

Povezano: Što trebate znati o korištenju žica u Javi

Primjer filtriranja i sortiranja vrijednosti bez strujanja


uvoz java.util. ArrayList;
uvoz java.util. Nizovi;
uvoz java.util. Popis;
javna klasa Main {
javna statička void glavna (String [] args) {
// deklariramo i inicijaliziramo popis polja
Popis randomValues ​​= Nizovi.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"
);
// proglasimo da će popis polja pohraniti potrebne vrijednosti
Popis requiredValues ​​= novi ArrayList <> ();
// izdvajanje potrebnih vrijednosti i njihovo spremanje u reqquiredValues
randomValues.forEach (vrijednost -> {
if (value.startsWith ("C")) {
requiredValues.add (vrijednost);
}
});
// sortiraj potrebne vrijednosti u rastućem redoslijedu
requiredValues.sort ((vrijednost niza1, vrijednost niza2) -> vrijednost1.compareTo (vrijednost2));
// ispisati svaku vrijednost na konzolu
requiredValues.forEach ((vrijednost niza) -> System.out.println (vrijednost));
}
}

Također ćete trebati deklarirati i inicijalizirati popis polja bez obzira koristite li streamove ili neki drugi način ekstrakcije. Ono što ne biste trebali učiniti da ste koristili streamove je deklariranje nove varijable koja će sadržavati tražene vrijednosti, niti stvaranje ostalih pet plus linija koda u gornjem primjeru.

Povezano: Kako stvoriti i izvesti operacije na nizovima u Javi

Gornji kod daje sljedeći izlaz u konzoli:


C11
C12
C13
C14
C15
C16

Život s potocima

U programiranju, učinkovitost govori o stvaranju istog rezultata sa znatno manje koda. To je upravo ono što protočni cjevovod čini za programera. Dakle, sljedeći put kada netko pita: "zašto je važno koristiti streamove u svom projektu?" Jednostavno rečeno: "streamovi podržavaju učinkovito programiranje."

Nastavljajući s našim gornjim primjerom, ovo je način na koji uvođenje streamova transformira cijeli program.

Filtriranje i sortiranje vrijednosti s primjerom streama


uvoz java.util. Nizovi;
uvoz java.util. Popis;
javna klasa Main {
javna statička void glavna (String [] args) {
// deklariramo i inicijaliziramo popis polja
Popis randomValues ​​= Nizovi.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"
);
// preuzima samo vrijednosti koje počinju s C, razvrstava ih i ispisuje na konzolu.
randomValues.stream (). filter (value-> value.startsWith ("C")). sorted (). forEach (System.out:: println);
}
}

Gornji kod pokazuje koliko je moćno sučelje streama. Potreban je popis vrijednosti slučajnih polja i pretvara ga u tok pomoću stream () funkcija. Zatim se tok smanjuje na popis polja koji sadrži potrebne vrijednosti (što su sve vrijednosti koje počinju sa C), koristiti filtar() funkcija.

Kao što možete vidjeti u gornjem primjeru, C vrijednosti su nasumično poredane na popisu polja. Ako biste tok ispisivali na ovom mjestu cjevovoda, vrijednost C15 prvo bi se tiskalo. Stoga je vrsta() funkcija je uvedena u cjevovod toka kako bi preuredila novi niz u rastućem redoslijedu.

Konačna funkcija u cjevovodu toka je a za svakoga() funkcija. Ovo je terminalna funkcija koja se koristi za zaustavljanje cjevovoda toka i daje sljedeće rezultate u konzoli:


C11
C12
C13
C14
C15
C16

Postoji opsežan popis posrednih operacija koje se mogu koristiti u protočnom cjevovodu.

Struja cjevovoda uvijek započinje jednim izvorom i a stream () funkcija, i uvijek završava s jednom operacijom terminala (iako postoji nekoliko različitih za odaberite između.) Ali između ova dva odjeljka nalazi se popis šest posrednih operacija koje možete koristiti.

U našem gornjem primjeru koriste se samo dvije od ovih posrednih operacijafiltar() i vrsta(). Intermedijarni postupak koji odaberete ovisit će o zadacima koje želite izvršiti.

Da je neka od vrijednosti koja započinje s „C“ na našem gore navedenom popisu nizova napisana malim slovima, a mi smo na njima izvršili iste posredne operacije, dobili bismo sljedeći rezultat.

Izvođenje operacija filtriranja i sortiranja na malim vrijednostima Primjer


uvoz java.util. Nizovi;
uvoz java.util. Popis;
javna klasa Main {
javna statička void glavna (String [] args) {
// deklariramo i inicijaliziramo popis polja
Popis randomValues ​​= Nizovi.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"
);
// preuzima samo vrijednosti koje počinju s C, razvrstava ih i ispisuje na konzolu.
randomValues.stream (). filter (value-> value.startsWith ("C")). sorted (). forEach (System.out:: println);
}
}

Gornji kod će u konzoli proizvesti sljedeće vrijednosti:


C11
C12
C14
C15

Jedini problem gornjeg izlaza je taj što ne predstavlja točno sve vrijednosti na našem popisu polja. Dobar način da se popravi ta mala pogreška je uvođenje još jedne posredne operacije u cjevovod toka; ova je operacija poznata kao karta() funkcija.

Korištenje primjera funkcije karte


uvoz java.util. Nizovi;
uvoz java.util. Popis;
javna klasa Main {
javna statička void glavna (String [] args) {
// deklariramo i inicijaliziramo popis polja
Popis randomValues ​​= Nizovi.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"
);
// pretvara sve male slova u velika slova,
// preuzima samo vrijednosti koje počinju s C, razvrstava ih i ispisuje na konzolu.
randomValues.stream (). map (String:: toUpperCase) .filter (value-> value.startsWith ("C")). sorted (). forEach (System.out:: println);
}
}

The karta() funkcija pretvara objekt iz jednog stanja u drugo; u našem primjeru iznad pretvara sve male znakove na popisu polja u velika slova.

Postavljanje karta() funkcija neposredno prije filtar() funkcija dohvaća sve vrijednosti koje počinju s C s popisa polja.

Gornji kod daje sljedeći rezultat u konzoli, uspješno predstavljajući sve vrijednosti na popisu polja.


C11
C12
C13
C14
C15
C16

Ostale tri posredne operacije koje možete koristiti u svojim aplikacijama uključuju:

  • zaviriti ()
  • ograničiti()
  • preskočiti()

Potoci Java 8 olakšavaju stvaranje efikasnog koda

S Java 8 streamovima možete iz jednog retka koda iz velikog izvora izvući ekstra specifične, relevantne podatke. Sve dok uključite početno stream () funkcije i operatora terminala, možete koristiti bilo koju kombinaciju posrednih operacija koje pružaju odgovarajuće izlaze za vaš cilj.

Ako se pitate o retku koda koji je zatvoren u našem filtar() funkcija; poznat je kao "lambda izraz". Lambda izrazi su još jedna značajka uvedena s Javom 8, a ima puno grumenčića koji bi vam mogli biti korisni.

E-mail
Kratki uvod u Java 8 Lambdas

Ako ste Java programer i želite saznati više o lambdama Java 8, u ovom ćemo članku pobliže pogledati sintaksu i upotrebu lambda.

Pročitajte Dalje

Povezane teme
  • Programiranje
  • Java
  • Vodiči za kodiranje
O autoru
Kadeisha Kean (Objavljeno 13 članaka)

Kadeisha Kean je programerica softvera u cijeloj tehnologiji i pisac tehničkih / tehnoloških tehnologija. Ona ima izrazitu sposobnost pojednostavljivanja nekih od najsloženijih tehnoloških koncepata; proizvodeći materijal koji lako može razumjeti bilo koji tehnološki novak. Zaljubljena je u pisanje, razvoj zanimljivog softvera i putovanje svijetom (kroz dokumentarne filmove).

Više od Kadeishe Kean

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Još jedan korak…!

Potvrdite svoju adresu e-pošte u e-pošti koju smo vam upravo poslali.

.