Java straumes iesācējiem: ievads straumju izmantošanā Java

Java straumes iesācējiem: ievads straumju izmantošanā Java

Java 8 straumes ļauj izstrādātājiem iegūt precīzus datus no lielas kolekcijas, izmantojot iepriekš noteiktu darbību kopumu.





Pirms Java 8 izlaišanas termina “straume” lietošana Java automātiski tiktu saistīta ar I/O. Tomēr Java 8 ieviesa straumi, ko var saukt par skaitļošanas darbību kopumu, kas ir savienots ķēdē, ko parasti dēvē par “plūsmas cauruļvadu”.





Šis raksts iepazīstinās jūs ar Java 8 straumēm un parādīs, kā tās var būt noderīgas jūsu projektos.





Kas ir straume?

Straume ir Java saskarne, kas ņem avotu, veic darbību kopumu, lai iegūtu konkrētus datus, un pēc tam nodrošina šos datus lietojumprogrammai lietošanai. Būtībā tas ļauj iegūt specializētus datus no vispārinātu datu kolekcijas.

Kā darbojas straumes

Plūsmas cauruļvads vienmēr sākas ar avotu. Avota veids ir atkarīgs no datu veida, ar kuru jūs strādājat, bet divi no populārākajiem ir masīvi un kolekcijas.



Lai kolekciju pārveidotu sākotnējā straumē, jums jāpievieno straume () funkciju avotam. Tādējādi avots tiks ievietots plūsmas cauruļvadā, kur tiks veiktas vairākas dažādas starpposma darbības (piemēram filtrs () un kārtot () ) var to operēt.

Pēc visu nepieciešamo starpposma darbību veikšanas varat ieviest termināla darbību (piemēram, katram() ), kas ražos iepriekš iegūtos datus no avota.





Dzīve bez straumēm

Java 8 tika izlaists 2014. gadā, taču pirms tam Java izstrādātājiem vēl vajadzēja iegūt īpašus datus no vispārīgu datu kolekcijas.

vai ir nelikumīgi piekļūt dziļajam tīmeklim

Pieņemsim, ka jums ir izlases rakstzīmju saraksts, kas apvienotas ar nejaušiem skaitļiem, lai veidotu unikālas virkņu vērtības, taču vēlaties tikai tās vērtības, kas sākas ar rakstzīmi C, un rezultātu vēlaties sakārtot augošā secībā. Šādi jūs varētu iegūt šos datus bez straumēm.





Saistīts: Kas jums jāzina par virkņu izmantošanu Java

Vērtību filtrēšana un šķirošana bez straumēm


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

Jums būs arī jādeklarē un jāinicializē masīvu saraksts neatkarīgi no tā, vai izmantojat straumes vai kādu citu ieguves metodi. Tas, kas jums nebūtu jādara, ja izmantotu straumes, ir deklarēt jaunu mainīgo, lai turētu nepieciešamās vērtības, kā arī neizveidot pārējās piecas plus koda rindiņas iepriekš minētajā piemērā.

Saistīts: Kā izveidot un veikt operācijas masīvos Java

Iepriekš minētais kods konsolē rada šādu izvadi:


C11
C12
C13
C14
C15
C16

Dzīve ar straumēm

Programmēšanā efektivitāte nozīmē tāda paša rezultāta radīšanu ar ievērojami mazāk koda. Plūsmas cauruļvads tieši to dara programmētājam. Tātad nākamreiz, kad kāds jautā: kāpēc ir svarīgi savā projektā izmantot straumes? Vienkārši sakot: straumes atbalsta efektīvu programmēšanu.

Turpinot iepriekš minēto piemēru, straumju ieviešana pārveido visu programmu.

Vērtību filtrēšana un šķirošana ar straumes piemēru


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

Iepriekš minētais kods parāda, cik jaudīga ir straumes saskarne. Tas aizņem nejaušu masīvu vērtību sarakstu un pārveido to straumē, izmantojot straume () funkciju. Pēc tam straume tiek samazināta līdz masīvu sarakstam, kurā ir nepieciešamās vērtības (kas ir visas vērtības, sākot ar C ), izmantojot filtrs () funkciju.

Kā redzat iepriekš minētajā piemērā, C vērtības ir nejauši sakārtotas masīvu sarakstā. Ja jūs plānojat izdrukāt straumi šajā konveijera vietā, vērtība C15 vispirms tiktu izdrukāts. Tāpēc, kārtot () funkcija tiek ieviesta plūsmas cauruļvadā, lai pārkārtotu jauno masīvu augošā secībā.

Straumes cauruļvada pēdējā funkcija ir a katram() funkciju. Šī ir termināla funkcija, ko izmanto, lai apturētu plūsmas cauruļvadu un konsolē iegūtu šādus rezultātus:


C11
C12
C13
C14
C15
C16

Straumes starpposma operācijas

Ir plašs starpposma darbību saraksts, ko var izmantot plūsmas cauruļvadā.

Plūsmas cauruļvads vienmēr sākas ar vienu avotu un a straume () funkciju un vienmēr beidzas ar vienu termināla darbību (lai gan ir vairāki dažādi, no kuriem izvēlēties.) Bet starp šīm divām sadaļām ir saraksts ar sešām starpdarbībām, kuras varat izmantot.

Iepriekš minētajā piemērā tiek izmantotas tikai divas no šīm starpposma darbībām --- filtrs () un kārtot () . Jūsu izvēlētā starpposma darbība būs atkarīga no uzdevumiem, kurus vēlaties veikt.

Ja kāda no vērtībām, kas mūsu masīvu sarakstā sākas ar C, būtu ar mazajiem burtiem un mēs tām veiktu tādas pašas starpposma darbības, mēs iegūtu šādu rezultātu.

Filtrēšanas un kārtošanas darbību veikšana ar mazajiem burtiem


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

Iepriekš minētais kods konsolē radīs šādas vērtības:


C11
C12
C14
C15

Vienīgā problēma ar iepriekš minēto rezultātu ir tā, ka tā precīzi neatspoguļo visu C vērtības mūsu masīvu sarakstā. Labs veids, kā novērst šo nelielo kļūdu, ir straumes cauruļvadā ieviest citu starpposma darbību; šī operācija ir pazīstama kā karte () funkciju.

Izmantojot kartes funkcijas piemēru


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 karte () funkcija pārveido objektu no viena stāvokļa uz citu; mūsu piemērā iepriekš tas pārveido visas mazās rakstzīmes masīvu sarakstā par lielajiem burtiem.

Ievietojot karte () funkcija tieši pirms filtrs () funkcija izgūst visas vērtības, kas sākas ar C no masīvu saraksta.

Iepriekš minētais kods konsolē rada šādu rezultātu, veiksmīgi pārstāvot visus C vērtības masīvu sarakstā.


C11
C12
C13
C14
C15
C16

Pārējās trīs starpposma darbības, kuras varat izmantot savās lietojumprogrammās, ir šādas:

  • palūrēt ()
  • limits ()
  • izlaist ()

Java 8 straumes atvieglo efektīva koda izveidi

Izmantojot Java 8 straumes, jūs varat iegūt īpaši specifiskus, atbilstošus datus no liela avota ar vienu koda rindu. Kamēr jūs iekļaujat sākotnējo straume () funkciju un termināļa operatoru, varat izmantot jebkuru starpdarbību kombināciju, kas nodrošina jūsu mērķim atbilstošu rezultātu.

programmatūra, lai atbloķētu tālruņus jebkurā tīklā

Ja jums rodas jautājums par koda rindu, kas ir iekļauta mūsu filtrs () funkcija; tas ir pazīstams kā “lambda izteiksme”. Lambda izteiksmes ir vēl viena funkcija, kas ieviesta ar Java 8, un tai ir daudz tīrradņu, kas jums varētu šķist noderīgi.

Kopīgot Kopīgot Čivināt E -pasts Īss ievads Java 8 lambdās

Ja esat Java programmētājs un vēlaties uzzināt vairāk par Java 8 lambdām, šajā rakstā mēs tuvāk apskatīsim lambda sintaksi un lietošanu.

Lasīt Tālāk
Saistītās tēmas
  • Programmēšana
  • Java
  • Kodēšanas apmācības
Par autoru Kadeiša Kīna(Publicēti 21 raksti)

Kadeisha Kean ir pilna komplekta programmatūras izstrādātājs un tehniskais/tehnoloģiju rakstnieks. Viņai ir izteikta spēja vienkāršot dažus no sarežģītākajiem tehnoloģiskajiem jēdzieniem; materiāla ražošana, ko var viegli saprast ikviens tehnoloģiju iesācējs. Viņa aizraujas ar rakstīšanu, interesantas programmatūras izstrādi un pasaules apceļošanu (caur dokumentālajām filmām).

Vairāk no Kadeisha Kean

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu