Java Streams za početnike: Uvod u korištenje Streams u Javi

Java Streams za početnike: Uvod u korištenje Streams u Javi

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





Prije objavljivanja Jave 8, korištenje izraza 'stream' u Javi automatski bi se povezalo s I/O. Međutim, Java 8 je uveo tok koji se može nazvati skupom računskih koraka povezanih zajedno u ono što se obično naziva 'protočni tok'.





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





Što je tok?

Stream je Java sučelje koje uzima izvor, provodi niz operacija za izdvajanje određenih podataka, a zatim te podatke daje aplikaciji na korištenje. U osnovi, omogućuje vam izdvajanje specijaliziranih podataka iz zbirke generaliziranih podataka.

Kako rade streamovi

Cjevovod strujanja uvijek počinje s izvorom. Vrsta izvora ovisi o vrsti podataka s kojima imate posla, ali dva popularnija su nizovi i zbirke.



Da biste zbirku pretvorili u početni tok, morate dodati datoteku stream () funkciju prema izvoru. Time će se izvor smjestiti u cjevovod toka gdje će se pojaviti nekoliko različitih posredničkih operacija (npr filtar() i vrsta() ) može raditi na njemu.

Nakon što su provedene sve potrebne posredne operacije, možete uvesti terminalnu operaciju (npr za svakoga() ), koji će proizvesti prethodno izdvojene podatke iz izvora.





Život bez strujanja

Java 8 objavljena je 2014. godine, no prije toga, Java programeri su još uvijek trebali izdvojiti specijalizirane podatke iz zbirke općih podataka.

preuzmi besplatne filmove na moj telefon

Recimo da imate popis nasumičnih znakova koji su kombinirani sa slučajnim brojevima za formiranje jedinstvenih vrijednosti niza, ali želite samo vrijednosti koje počinju znakom C i želite rasporediti rezultat u rastućem redoslijedu. Ovako biste izdvojili te podatke bez streamova.





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

Primjer filtriranja i razvrstavanja vrijednosti bez streamova


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));
}
}

Također ćete morati deklarirati i inicijalizirati popis polja koristite li streamove ili neki drugi način izdvajanja. Ono što ne biste morali učiniti da koristite streamove je deklarirati novu varijablu koja će sadržavati potrebne vrijednosti, niti stvarati ostalih pet redaka plus u gornjem primjeru.

Povezano: Kako stvoriti i izvesti operacije nad nizovima u Javi

Gornji kôd proizvodi sljedeći izlaz u konzoli:


C11
C12
C13
C14
C15
C16

Život sa strujama

U programiranju učinkovitost govori o postizanju istog rezultata sa znatno manje koda. To je upravo ono što stream pipeline radi za programera. Dakle, sljedeći put kad netko upita: zašto je važno koristiti streamove u svom projektu? Jednostavno rečeno: streamovi podržavaju učinkovito programiranje.

Nastavljajući s gornjim primjerom, evo kako uvođenjem streamova transformira cijeli program.

Filtriranje i sortiranje vrijednosti s primjerom toka


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);
}
}

Gornji kôd pokazuje koliko je moćno stream sučelje. Uzima popis slučajnih vrijednosti niza i pretvara ga u tok pomoću stream () funkcija. Potok se zatim smanjuje na popis polja koji sadrži potrebne vrijednosti (što su sve vrijednosti koje počinju s C ), koristiti filtar() funkcija.

Kao što možete vidjeti u gornjem primjeru, C vrijednosti su nasumično raspoređene u popisu polja. Ako biste ispisali tok na ovoj točki cjevovoda, vrijednost C15 bi se prvo tiskalo. Stoga, vrsta() funkcija je uvedena u cjevovod toka za preuređivanje novog niza u rastućem redoslijedu.

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


C11
C12
C13
C14
C15
C16

Posredničke operacije streama

Postoji opsežan popis posredničkih operacija koje se mogu koristiti u protočnom toku.

Strujni cjevovod uvijek počinje s jednim izvorom i a stream () funkciju, a uvijek završava jednom terminalnom operacijom (iako postoji nekoliko različitih za izabrati.) No između ova dva odjeljka nalazi se popis od šest posredničkih operacija koje možete koristiti.

U našem gornjem primjeru koriste se samo dvije od ovih posrednih operacija --- filtar() i vrsta() . Srednja operacija koju odaberete ovisit će o zadacima koje želite izvesti.

Da je bilo koja od vrijednosti koje započinju s C na našem gore navedenom popisu polja mala slova i da smo na njima izveli iste posredničke operacije, dobili bismo sljedeći rezultat.

Izvođenje operacija filtriranja i sortiranja na malim vrijednostima Primjer


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);
}
}

Gornji kôd će proizvesti sljedeće vrijednosti u konzoli:


C11
C12
C14
C15

Jedini problem s gornjim izlazom je taj što ne predstavlja točno sve C vrijednosti na popisu polja. Dobar način za ispravljanje ove male pogreške je uvođenje još jedne posredničke operacije u cjevovod toka; ova operacija je poznata kao karta() funkcija.

Primjer funkcije karte


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 karta() funkcija pretvara objekt iz jednog stanja u drugo; u našem gore navedenom primjeru pretvara sve male znakove na popisu polja u velika slova.

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

Gornji kôd proizvodi sljedeći rezultat u konzoli, uspješno predstavljajući sve C vrijednosti na popisu polja.


C11
C12
C13
C14
C15
C16

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

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

Stream Java 8 olakšava stvaranje učinkovitog koda

Pomoću Java 8 streamova možete izvući dodatne specifične, relevantne podatke iz velikog izvora jednim retkom koda. Sve dok uključite početno stream () funkcije i operatora terminala, možete koristiti bilo koju kombinaciju posrednih operacija koje omogućuju odgovarajuće rezultate za vaš cilj.

kako se radi grupni tekst

Ako se pitate o retku koda koji se nalazi unutar našeg filtar() funkcija; poznat je kao 'lambda izraz'. Lambda izrazi su još jedna značajka koja je uvedena u Javi 8 i ima puno grumenaca koji bi vam mogli biti od koristi.

Udio Udio Cvrkut E -pošta Kratak uvod u Java 8 Lambde

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

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Java
  • Vodiči za kodiranje
O autoru Kadeisha Kean(Objavljen 21 članak)

Kadeisha Kean je programer softvera i pisac tehničke/tehnologije. Ona ima izrazitu sposobnost pojednostavljivanja nekih od najsloženijih tehnoloških koncepata; proizvodnju materijala koji će lako razumjeti svaki tehnološki novak. Oduševljena je pisanjem, razvojem zanimljivog softvera i putovanjem po svijetu (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!

Kliknite ovdje za pretplatu