„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“, „Java“ termino naudojimas automatiškai bus susietas su įvestimi / išvestimi. Tačiau „Java 8“ pristatė srautą, kurį galima vadinti skaičiavimo žingsnių rinkiniu, sujungtu grandinėje tame, 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 ima šaltinį, atlieka operacijų rinkinį, kad išgautų konkrečius duomenis, 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 jūsų tvarkomų duomenų tipo, tačiau du populiariausi yra masyvai ir rinkiniai.
Norėdami transformuoti kolekciją į pradinį srautą, turėsite pridėti
srautas() funkcija šaltiniui. Tai šaltinį pateks į srauto vamzdyną, kuriame bus atliekamos kelios skirtingos tarpinės operacijos (pvz., filtras() ir rūšiuoti ()) gali jį valdyti.Atlikę visas reikalingas tarpines operacijas, galite įvesti terminalo operaciją (pvz., kiekvienam()), kuris sukurs anksčiau iš šaltinio 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šgauti specializuotus duomenis iš bendrųjų duomenų rinkinio.
Tarkime, kad turite atsitiktinių simbolių sąrašą, kurie kartu su atsitiktiniais skaičiais sudaro unikalias eilutės reikšmes, bet jūs norite tik reikšmių, kurios prasideda simboliu „C“, ir rezultatą norite išdėstyti didėjančia tvarka įsakymas. Tai kaip išgautumėte tuos duomenis be srautų.
Susijęs: Ką reikia žinoti apie eilučių naudojimą „Java“
Vertių filtravimas ir rūšiavimas be srautų pavyzdys
importuoti java.util. ArrayList;
importuoti java.util. Masyvai;
importuoti java.util. Sąrašas;
visuomenės klasė Pagrindinis {
public static void main (String [] argumentuoja) {
// deklaruoti ir inicializuoti masyvų sąrašą
Sąrašas 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“
);
// deklaruoti, kad masyvų sąraše bus išsaugotos reikalingos vertės
Sąrašas requiredValues = new ArrayList <> ();
// reikalaujamų reikšmių išskyrimas ir išsaugojimas reqquiredValues
randomValues.forEach (reikšmė -> {
jei (reikšmė.startai su („C“)) {
requiredValues.add (reikšmė);
}
});
// rūšiuoti reikalingasVertes didėjimo tvarka
requiredValues.sort ((String value1, String value2) -> value1.compareTo (value2));
// išspausdinkite kiekvieną vertę į konsolę
requiredValues.forEach ((String value) -> System.out.println (reikšmė));
}
}
Taip pat turėsite deklaruoti ir inicializuoti masyvų sąrašą, nesvarbu, ar naudojate srautus, ar kokį kitą išskleidimo metodą. Viskas, ko jums nereikėtų daryti, jei naudojote srautus, yra deklaruoti naują kintamąjį, kad būtų laikomos reikalingos vertės, nei sukurti pirmame pavyzdyje likusias penkias pliuso eilutes.
Susijęs: Kaip sukurti ir atlikti „Java“ masyvų operacijas
Aukščiau pateiktas kodas sukuria šią konsolės 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. Tai yra būtent tai, ką srauto vamzdynas daro programuotojui. Taigi 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 įvedant srautus, transformuojama visa programa.
Vertybių filtravimas ir rūšiavimas naudojant srauto pavyzdį
importuoti java.util. Masyvai;
importuoti java.util. Sąrašas;
visuomenės klasė Pagrindinis {
public static void main (String [] argumentuoja) {
// deklaruoti ir inicializuoti masyvų sąrašą
Sąrašas 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“
);
// nuskaito tik reikšmes, prasidedančias raide C, rūšiuoja jas ir atspausdina konsolėje.
randomValues.stream (). filter (value-> value.startsWith ("C")). surūšiuotas (). forEach (System.out:: println);
}
}
Aukščiau pateiktas kodas parodo, kokia galinga yra srauto sąsaja. Jis paima atsitiktinių masyvo verčių sąrašą ir paverčia jį srautu naudodamas srautas() funkcija. Tada srautas sumažinamas iki masyvų sąrašo, kuriame yra reikalingos vertės (tai yra visos vertės, prasidedančios pradedant C), naudojant filtras() funkcija.
Kaip matote aukščiau pateiktame pavyzdyje, C reikšmės yra atsitiktinai išdėstytos masyvų sąraše. Jei spausdintumėte srautą šiame vamzdyno taške, reikšmė C15 pirmiausia būtų atspausdinta. Todėl rūšiuoti () funkcija perduodama srauto vamzdynui pertvarkyti naują masyvą didėjimo tvarka.
Galutinė srauto vamzdyno funkcija yra a kiekvienam() funkcija. Tai yra terminalo funkcija, naudojama srauto vamzdynui sustabdyti ir konsolėje pateikiami šie rezultatai:
C11
C12
C13
C14
C15
C16
Yra išsamus tarpinių operacijų, kurias galima naudoti sraute, sąrašas.
Srauto vamzdynas visada prasideda nuo vieno šaltinio ir a srautas() funkciją ir visada baigiasi vienu terminalu (nors yra keletas skirtingų pasirinkite iš.) Bet tarp šių dviejų skyrių yra šešių galimų tarpinių operacijų sąrašas naudoti.
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š aukščiau esančių masyvų sąrašo reikšmių, prasidedančių raide „C“, būtų mažosiomis raidėmis ir jomis atliktume tas pačias tarpines operacijas, gautume tokį rezultatą.
Filtravimo ir rūšiavimo operacijų atlikimas mažosiomis vertėmis
importuoti java.util. Masyvai;
importuoti java.util. Sąrašas;
visuomenės klasė Pagrindinis {
public static void main (String [] argumentuoja) {
// deklaruoti ir inicializuoti masyvų sąrašą
Sąrašas 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“
);
// nuskaito tik reikšmes, prasidedančias raide C, rūšiuoja jas ir atspausdina konsolėje.
randomValues.stream (). filter (value-> value.startsWith ("C")). surūšiuotas (). forEach (System.out:: println);
}
}
Aukščiau pateiktas kodas konsolėje sukurs šias vertes:
C11
C12
C14
C15
Vienintelė aukščiau pateikto išvesties problema yra ta, kad ji tiksliai neatspindi visų C reikšmės mūsų masyvų sąraše. Geras būdas pašalinti šią mažą klaidą yra įvesti dar vieną tarpinę operaciją srauto dujotiekyje; ši operacija yra žinoma kaip žemėlapis () funkcija.
Naudojant žemėlapio funkcijos pavyzdį
importuoti java.util. Masyvai;
importuoti java.util. Sąrašas;
visuomenės klasė Pagrindinis {
public static void main (String [] argumentuoja) {
// deklaruoti ir inicializuoti masyvų sąrašą
Sąrašas 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“
);
// paverčia visus mažąsias raides didžiosiomis raidėmis,
// nuskaito tik reikšmes, prasidedančias raide C, rūšiuoja jas ir atspausdina konsolėje.
randomValues.stream (). map (String:: toUpperCase) .filter (value-> value.startsWith ("C")). rūšiuojamas (). forEach (System.out:: println);
}
}
žemėlapis () funkcija paverčia objektą iš vienos būsenos į kitą; aukščiau pateiktame pavyzdyje jis pakeičia visus mažuosius simbolius masyvų sąraše į didžiųjų raidžių simbolius.
Pateikimas žemėlapis () funkcija prieš pat filtras() funkcija gauna visas reikšmes, kurios prasideda C iš masyvų sąrašo.
Aukščiau pateiktas kodas pateikia tokį rezultatą konsolėje, sėkmingai atvaizduodamas visus C reikšmės masyvų sąraše.
C11
C12
C13
C14
C15
C16
Kiti trys tarpiniai veiksmai, kuriuos galite naudoti savo programose, yra šie:
- žvilgtelėti ()
- riba ()
- praleisti ()
„Java 8“ srautai palengvina efektyvaus kodo kūrimą
Naudodami „Java 8“ srautus, galite išgauti papildomus specifinius, aktualius duomenis iš didelio šaltinio su viena kodo eilute. Tol, kol įtraukiate pradinį srautas() funkciją ir terminalo operatorių, galite naudoti bet kokį tarpinių operacijų derinį, kuris jūsų tikslui suteikia tinkamus išėjimus.
Jei jums įdomu apie kodo eilutę, uždarą mūsų filtras() funkcija; jis žinomas kaip „lambda išraiška“. Lambda išraiškos yra dar viena funkcija, pristatyta „Java 8“, ir joje yra daugybė grynuolių, kurie jums gali būti naudingi.
Jei esate „Java“ programuotojas ir norite sužinoti daugiau apie „Java 8 lambdas“, šiame straipsnyje mes atidžiau pažvelgsime į lambda sintaksę ir naudojimą.
Skaitykite toliau
- Programavimas
- „Java“
- Kodavimo pamokos

Kadeisha Kean yra „Full Stack“ programinės įrangos kūrėja ir technikos / technologijų rašytoja. Ji turi aiškų sugebėjimą supaprastinti kai kurias sudėtingiausias technologines sąvokas; gamina medžiagą, kurią lengvai supranta bet kuris naujokas technologija. Ji aistringai rašo, kuria įdomią programinę įrangą ir keliauja po pasaulį (per dokumentinius filmus).
Prenumeruokite mūsų naujienlaiškį
Prisijunkite prie mūsų naujienlaiškio, kuriame rasite techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!
Dar vienas žingsnis…!
Prašome patvirtinti savo el. Pašto adresą el. Laiške, kurį jums ką tik išsiuntėme.