logo

Suoratoista Javassa

Stream otettiin käyttöön Java 8 Stream API:ta käytetään objektikokoelmien käsittelyyn. Java-virta on objektijono, joka tukee erilaisia ​​​​menetelmiä, jotka voidaan liukuhihnalla tuottaa halutun tuloksen. 

Streamin käyttö Javassa

Streamin käyttötavat Javassa on mainittu alla:



  • Stream API on tapa ilmaista ja käsitellä objektikokoelmia.
  • Anna meille mahdollisuus suorittaa toimintoja, kuten suodatuskartoituksen vähentäminen ja lajittelu.

Kuinka luoda Java Stream

Java Stream Creation on yksi perusvaiheista ennen Java Streamin toimintojen harkitsemista. Alla on syntaksi, joka on annettu Java-virran ilmoittamiselle.

taulukoita javassa

Syntaksi

Striimaavirta;

Tässä T on joko luokkaobjekti tai tietotyyppi ilmoituksesta riippuen.



Java Stream -ominaisuudet

Java-streamien ominaisuudet on mainittu alla:

  • Virta ei ole tietorakenne; se vain ottaa syötteen kokoelmataulukoista tai I/O-kanavista.
  • Virrat eivät muuta alkuperäistä dataa; he tuottavat tuloksia vain käyttämällä menetelmiään.
  • Välioperaatiot (kuten suodatinkartta jne.) ovat laiskoja ja palauttavat toisen virran, jotta voit ketjuttaa ne yhteen.
  • Päätetoiminto (kuten kerätä forEach count) päättää streamin ja antaa lopullisen tuloksen.

Erilaiset toiminnot virroissa

Streamissä on kahdenlaisia ​​toimintoja:

  1. Keskitason toiminnot
  2. Terminaalin toiminta

Keskitason toiminnot

Java Stream -toiminnot' title=



Välioperaatiot ovat operaatiotyyppejä, joissa useat menetelmät on ketjutettu peräkkäin.

Keskitason toimintojen ominaisuudet

  • Menetelmät on ketjutettu yhteen.
  • Välioperaatiot muuttavat virran toiseksi virraksi.
  • Se mahdollistaa suodatuskonseptin, jossa yksi menetelmä suodattaa tiedot ja siirtää sen toiselle menetelmälle käsittelyn jälkeen.

Tärkeitä välioperaatioita

Alla on mainittu muutamia keskitason operaatioita:

1. kartta() : Karttamenetelmää käytetään palauttamaan virta, joka koostuu tuloksista, jotka on saatu annetun funktion soveltamisesta tämän virran elementteihin.

Syntaksi:

Striimaakartta (toimintokartoittaja)

2. suodatin() : Suodatusmenetelmää käytetään elementtien valitsemiseen argumenttina välitetyn Predikaatin mukaisesti.

Syntaksi:

Striimaasuodatin (predikaattipredikaatti)

3. lajiteltu() : Lajiteltu menetelmää käytetään streamin lajitteluun.

Syntaksi:

Striimaalajiteltu()
Striimaalajiteltu(Vertailijavertailija)

4. flatMap(): FlatMap-toimintoa Java Streamsissä käytetään tasoittamaan kokoelmavirta yhdeksi elementtivirraksi.

Syntaksi:

Panda-sarjan ominaisuuksia

StriimaaflatMap (toiminto> kartoittaja)

5. different() : Poistaa päällekkäiset elementit. Se palauttaa virran, joka koostuu erillisistä elementeistä (Object.equals(Object) -asetuksen mukaan).

Syntaksi:

Striimaaerillinen()

6. kurkista() : Suorittaa toiminnon kullekin elementille muuttamatta streamia. Se palauttaa virran, joka koostuu tämän virran elementeistä ja suorittaa lisäksi kullekin elementille tarjotun toiminnon, kun elementtejä kulutetaan tuloksena olevasta virrasta.

Syntaksi:

Striimaakurkistaa (kuluttajatoiminta)

Java-ohjelma, joka näyttää kaikkien välitoimintojen käytön:

Java
import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; public class StreamIntermediateOperationsExample {  public static void main(String[] args) {  // List of lists of names  List<List<String>> listOfLists = Arrays.asList(  Arrays.asList('Reflection' 'Collection' 'Stream')  Arrays.asList('Structure' 'State' 'Flow')  Arrays.asList('Sorting' 'Mapping' 'Reduction' 'Stream')  );  // Create a set to hold intermediate results  Set<String> intermediateResults = new HashSet<>();  // Stream pipeline demonstrating various intermediate operations  List<String> result = listOfLists.stream()  .flatMap(List::stream)   .filter(s -> s.startsWith('S'))   .map(String::toUpperCase)   .distinct()   .sorted()   .peek(s -> intermediateResults.add(s))  .collect(Collectors.toList());   // Print the intermediate results  System.out.println('Intermediate Results:');  intermediateResults.forEach(System.out::println);  // Print the final result  System.out.println('Final Result:');  result.forEach(System.out::println);  } } 

Lähtö
Intermediate Results: STRUCTURE STREAM STATE SORTING Final Result: SORTING STATE STREAM STRUCTURE 

Selitys:

  • listOfLists luodaan luettelona, ​​joka sisältää muita merkkijonoluetteloita.
  • flatMap(Lista::stream): Tasoittaa sisäkkäiset luettelot yhdeksi merkkijonovirraksi.
  • suodatin(s -> s.startsWith('S')) : Suodattaa merkkijonot sisältämään vain ne, jotka alkavat S:llä.
  • kartta(merkkijono::toUpperCase) : Muuntaa jokaisen virran merkkijonon isoiksi kirjaimiksi.
  • erillinen() : Poistaa päällekkäiset merkkijonot.
  • lajiteltu() : Lajittelee tuloksena olevat merkkijonot aakkosjärjestykseen.
  • kurkistaa(...): Lisää jokaisen käsitellyn elementin välitarkastuksen intermediateResults-joukkoon.
  • kerätä(Collectors.toList()): Kokoaa lopulliset käsitellyt merkkijonot luetteloksi nimeltä tulos.

Ohjelma tulostaa välitulokset, jotka on tallennettu intermediateResults-joukkoon. Lopuksi se tulostaa tulosluettelon, joka sisältää täysin käsitellyt merkkijonot kaikkien stream-toimintojen jälkeen.

Terminaalin toiminta

Päätetoiminnot ovat toimintotyyppejä, jotka palauttavat tuloksen. Näitä toimintoja ei käsitellä enempää, ne vain palauttavat lopputuloksen arvon.

Tärkeitä terminaalitoimintoja

1. kerätä() : Keräysmenetelmää käytetään palauttamaan virralle suoritettujen välitoimintojen tulos.

Syntaksi:

R kerää (keräilijäkeräilijä)

2. forEach() : ForEach-menetelmää käytetään iteroitaessa virran jokaisen elementin läpi.

Syntaksi:

mitätön forEach (kuluttajatoiminta)

3. vähentää(): Vähennysmenetelmää käytetään vähentämään virran elementit yhdeksi arvoksi. Vähennysmenetelmä ottaa BinaryOperatorin parametriksi.

Syntaksi:

T vähentää(T-identiteetti BinaryOperatorakku)
Valinnainenvähentää (BinaryOperatorakku)

4. count() : Palauttaa virran elementtien määrän.

Syntaksi:

pitkä laskenta ()

5. findFirst() : Palauttaa virran ensimmäisen elementin, jos se on olemassa.

Syntaksi:

Valinnainenlöydä ensin()

avl-puun kierto

6. allMatch() : Tarkistaa, vastaavatko kaikki virran elementit annettua predikaattia.

Syntaksi:

boolen allMatch(Predikaattipredikaatti)

7. Anymatch () : Tarkistaa, vastaako jokin virran osa tiettyä predikaattia.

Syntaksi:

Boolen Anymatch (predikaattipredikaatti)

Tässä ans-muuttujalle annetaan alkuarvo 0 ja siihen lisätään i.

Huomautus: Välioperaatiot suoritetaan Lazy Evaluation -konseptin perusteella, joka varmistaa, että jokainen menetelmä palauttaa kiinteän arvon (päätetoiminto) ennen siirtymistä seuraavaan menetelmään.

Java-ohjelma, joka käyttää kaikkia päätetoimintoja:

Java
import java.util.*; import java.util.stream.Collectors; public class StreamTerminalOperationsExample {  public static void main(String[] args) {  // Sample data  List<String> names = Arrays.asList(  'Reflection' 'Collection' 'Stream'  'Structure' 'Sorting' 'State'  );  // forEach: Print each name  System.out.println('forEach:');  names.stream().forEach(System.out::println);  // collect: Collect names starting with 'S' into a list  List<String> sNames = names.stream()  .filter(name -> name.startsWith('S'))  .collect(Collectors.toList());  System.out.println('ncollect (names starting with 'S'):');  sNames.forEach(System.out::println);  // reduce: Concatenate all names into a single string  String concatenatedNames = names.stream().reduce(  ''  (partialString element) -> partialString + ' ' + element  );  System.out.println('nreduce (concatenated names):');  System.out.println(concatenatedNames.trim());  // count: Count the number of names  long count = names.stream().count();  System.out.println('ncount:');  System.out.println(count);  // findFirst: Find the first name  Optional<String> firstName = names.stream().findFirst();  System.out.println('nfindFirst:');  firstName.ifPresent(System.out::println);  // allMatch: Check if all names start with 'S'  boolean allStartWithS = names.stream().allMatch(  name -> name.startsWith('S')  );  System.out.println('nallMatch (all start with 'S'):');  System.out.println(allStartWithS);  // anyMatch: Check if any name starts with 'S'  boolean anyStartWithS = names.stream().anyMatch(  name -> name.startsWith('S')  );  System.out.println('nanyMatch (any start with 'S'):');  System.out.println(anyStartWithS);  } } 

Lähtö:

StreamsOutput' loading='lazy' title=Lähtö

Selitys:

  • Nimiluettelo luodaan esimerkkimerkkijonoilla.
  • jokaiselle: Tulostaa jokaisen luettelon nimen.
  • kerätä : Suodattaa S-kirjaimella alkavat nimet ja kerää ne uuteen luetteloon.
  • vähentää : Yhdistää kaikki nimet yhdeksi merkkijonoksi.
  • laskea : Laskee nimien kokonaismäärän.
  • löydä ensin : Etsii ja tulostaa etunimen luettelosta.
  • allMatch : Tarkistaa, alkavatko kaikki nimet S-kirjaimella.
  • epäonninen : Tarkistaa, alkaako jokin nimi S-kirjaimella.

Ohjelma tulostaa jokaisen nimen S-kirjaimella alkavat nimet ketjutetut nimet nimien lukumäärän etunimen, alkavatko kaikki nimet S:llä ja alkavatko kaikki nimet S:llä.

Java Streamin edut

Meillä on joitain etuja, joiden vuoksi käytämme Streamia Javassa, kuten alla mainitaan:

  • Ei tallennustilaa
  • Toimintojen putkisto
  • Laiskuus
  • Voi olla loputon
  • Voidaan rinnastaa
  • Voidaan luoda kokoelmataulukoista Tiedostot Rivit Methods in Stream IntStream jne.

Java-virtojen todelliset käyttötapaukset

Virtoja käytetään laajalti nykyaikaisissa Java-sovelluksissa:

  • Tietojenkäsittely
  • JSON/XML-vastausten käsittelyyn
  • Tietokantatoimintoihin
  • Samanaikainen käsittely