„Java“ srautai pradedantiesiems: įvadas į srautų naudojimą „Java“

„Java“ srautai pradedantiesiems: įvadas į srautų naudojimą „Java“

„Java 8“ srautai leidžia kūrėjams išgauti tikslius duomenis iš didelės kolekcijos, naudojant iš anksto nustatytų operacijų rinkinį.





Prieš išleidžiant „Java 8“ termino „srautas“ naudojimas „Java“ automatiškai būtų susietas su įvestimi/išvestimi. Tačiau „Java 8“ pristatė srautą, kuris gali būti vadinamas skaičiavimo veiksmų rinkiniu, sujungtu į tai, kas paprastai vadinama „srauto vamzdynu“.





Šis straipsnis supažindins jus su „Java 8“ srautais ir parodys, kaip jie gali būti naudingi jūsų projektuose.





Kas yra srautas?

Srautas yra „Java“ sąsaja, kuri paima šaltinį, atlieka operacijų rinkinį tam tikriems duomenims išgauti, tada pateikia tuos duomenis programai naudoti. Iš esmės tai leidžia išgauti specializuotus duomenis iš apibendrintų duomenų rinkinio.

Kaip veikia srautai

Srauto vamzdynas visada prasideda nuo šaltinio. Šaltinio tipas priklauso nuo duomenų tipo, su kuriuo susiduriate, tačiau du populiaresni yra masyvai ir rinkiniai.



Jei norite kolekciją paversti pradiniu srautu, turėsite pridėti srautas() funkciją prie šaltinio. Taip šaltinis bus įtrauktas į srauto vamzdyną, kuriame bus atliekamos kelios skirtingos tarpinės operacijos (pvz filtras() ir rūšiuoti () ) gali jį operuoti.

Atlikę visas reikalingas tarpines operacijas, galite įdiegti terminalo operaciją (pvz kiekvienam() ), kuris sukurs iš šaltinio anksčiau išgautus duomenis.





Gyvenimas be srautų

„Java 8“ buvo išleista 2014 m., Tačiau prieš tai „Java“ kūrėjams vis tiek reikėjo iš bendrų duomenų rinkinio išgauti specializuotus duomenis.

šiame kompiuteryje nėra įjungtas vt-x/amd-v

Tarkime, kad turite atsitiktinių simbolių, sujungtų su atsitiktiniais skaičiais, sąrašą, kad sudarytumėte unikalias eilučių reikšmes, tačiau norite tik tas reikšmes, kurios prasideda simboliu C, o rezultatą norite išdėstyti didėjančia tvarka. Taip tuos duomenis išgautumėte be srautų.





Susijęs: Ką reikia žinoti apie eilučių naudojimą „Java“

Vertybių filtravimas ir rūšiavimas be srautų pavyzdys


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

Taip pat turėsite deklaruoti ir inicijuoti masyvų sąrašą, nesvarbu, ar naudojate srautus, ar kokį kitą gavimo būdą. Tai, ko jums nereikėtų daryti, jei naudojate srautus, yra paskelbti naują kintamąjį, kad būtų išlaikytos reikiamos vertės, ir nesukurti kitų penkių plius kodo eilučių aukščiau pateiktame pavyzdyje.

Susijęs: Kaip sukurti ir atlikti operacijas masyvuose „Java“

Aukščiau pateiktas kodas konsolėje sukuria tokią išvestį:


C11
C12
C13
C14
C15
C16

Gyvenimas su srautais

Programuojant efektyvumas reiškia, kad gaunamas tas pats rezultatas su žymiai mažesniu kodu. Būtent tai srauto vamzdynas daro programuotojui. Taigi, kai kitą kartą kas nors paklaus: kodėl jūsų projekte svarbu naudoti srautus? Paprasčiau tariant: srautai palaiko efektyvų programavimą.

Tęsiant aukščiau pateiktą pavyzdį, taip įvedus srautus visa programa pasikeičia.

Vertybių filtravimas ir rūšiavimas naudojant srauto pavyzdį


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

Aukščiau pateiktas kodas parodo, kokia galinga yra srauto sąsaja. Jis paima atsitiktinių masyvų reikšmių sąrašą ir paverčia jį srautu naudodami srautas() funkcija. Tada srautas sumažinamas iki masyvo sąrašo, kuriame yra reikiamos vertės (tai visos reikšmės, prasidedančios C ), naudojant filtras() funkcija.

Kaip matote aukščiau pateiktame pavyzdyje, C vertės yra atsitiktinai išdėstytos masyvų sąraše. Jei spausdintumėte srautą šiame dujotiekio taške, reikšmė C15 pirmiausia būtų atspausdintas. Todėl, rūšiuoti () funkcija įvedama į srauto vamzdyną, kad būtų galima pertvarkyti naują masyvą didėjančia tvarka.

Galutinė srauto dujotiekio funkcija yra a kiekvienam() funkcija. Tai yra terminalo funkcija, naudojama srautui sustabdyti ir konsolėje pateikiami šie rezultatai:


C11
C12
C13
C14
C15
C16

Srauto tarpinės operacijos

Yra platus tarpinių operacijų, kurias galima naudoti srauto vamzdyne, sąrašas.

Srauto vamzdynas visada prasideda nuo vieno šaltinio ir a srautas() funkcija ir visada baigiasi vieno terminalo operacija (nors galima rinktis iš kelių skirtingų.) Tačiau tarp šių dviejų skyrių yra šešių tarpinių operacijų, kurias galite naudoti, sąrašas.

Aukščiau pateiktame pavyzdyje naudojamos tik dvi iš šių tarpinių operacijų --- filtras() ir rūšiuoti () . Pasirinkta tarpinė operacija priklausys nuo norimų atlikti užduočių.

Jei kuri nors iš reikšmių, prasidedančių C aukščiau esančiame mūsų masyvo sąraše, būtų mažosiomis raidėmis ir atliktume tas pačias tarpines operacijas, gautume tokį rezultatą.

Filtravimo ir rūšiavimo operacijų atlikimas mažosiomis vertėmis Pavyzdys


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

Aukščiau pateiktas kodas konsolėje sukurs šias reikšmes:


C11
C12
C14
C15

Vienintelė aukščiau išvesties problema yra ta, kad ji tiksliai neatspindi visų C reikšmes mūsų masyvų sąraše. Geras būdas ištaisyti šią nedidelę klaidą - srauto dujotiekyje įvesti kitą tarpinę operaciją; ši operacija yra žinoma kaip žemėlapis () funkcija.

Žemėlapio funkcijos pavyzdys


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 žemėlapis () funkcija paverčia objektą iš vienos būsenos į kitą; aukščiau pateiktame pavyzdyje visus masyvo sąrašo mažuosius simbolius paverčia didžiosiomis.

Įdėjus žemėlapis () funkcija prieš pat filtras() funkcija nuskaito visas vertes, kurios prasideda C iš masyvo sąrašo.

Aukščiau pateiktas kodas konsolėje sukuria tokį rezultatą, sėkmingai atstovaujantį visus C reikšmės masyvo sąraše.


C11
C12
C13
C14
C15
C16

Kitos trys tarpinės operacijos, kurias galite naudoti savo programose:

  • žvilgtelėti ()
  • riba ()
  • praleisti ()

„Java 8“ srautai palengvina efektyvaus kodo kūrimą

Naudodami „Java 8“ srautus galite išgauti ypač konkrečius, svarbius duomenis iš didelio šaltinio naudodami vieną kodo eilutę. Kol įtraukiate pradinį srautas() funkciją ir terminalo operatorių, galite naudoti bet kokį tarpinių operacijų derinį, kuris užtikrina tikslinius rezultatus.

vietos, kur pataisyti „iPhone“ ekraną

Jei jums įdomu, kokia kodo eilutė yra mūsų filtras() funkcija; tai žinoma kaip „lambda išraiška“. „Lambda“ išraiškos yra dar viena funkcija, įdiegta naudojant „Java 8“, ir joje yra daug grynuolių, kurie jums gali būti naudingi.

Dalintis Dalintis „Tweet“ Paštu Trumpas „Java 8“ įvadas „Lambdas“

Jei esate „Java“ programuotojas ir norite sužinoti daugiau apie „Java 8“ lambda, šiame straipsnyje mes atidžiau pažvelgsime į lambda sintaksę ir naudojimą.

Skaityti toliau
Susijusios temos
  • Programavimas
  • „Java“
  • Kodavimo pamokos
Apie autorių Kadeisha Kean(Paskelbti 21 straipsniai)

Kadeisha Kean yra „Full Stack“ programinės įrangos kūrėja ir techninė/technologijų rašytoja. Ji turi aiškų sugebėjimą supaprastinti kai kurias sudėtingiausias technologines sąvokas; gaminti medžiagą, kurią lengvai supranta bet kuris naujokas. Ji aistringai rašo, kuria įdomią programinę įrangą ir keliauja po pasaulį (per dokumentinius filmus).

Daugiau iš Kadeisha Kean

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia