Java -suoratoistot aloittelijoille: Johdanto Streamien käyttämiseen Javassa

Java -suoratoistot aloittelijoille: Johdanto Streamien käyttämiseen Javassa

Java 8 -virtojen avulla kehittäjät voivat poimia tarkkoja tietoja suuresta kokoelmasta käyttämällä ennalta määritettyjä toimintoja.





Ennen Java 8: n julkaisua termin 'stream' käyttö Javassa liitettiin automaattisesti I/O: hon. Java 8 esitteli kuitenkin virran, jota voidaan kutsua laskennallisten vaiheiden joukkoksi ketjutettuna yhteen niin kutsutussa 'stream -putkilinjassa'.





Tämä artikkeli tutustuttaa sinut Java 8 -virtoihin ja osoittaa, kuinka ne voivat olla hyödyllisiä projekteissasi.





Mikä on Stream?

Virta on Java -käyttöliittymä, joka ottaa lähteen, suorittaa joukon toimintoja tietyn datan poimimiseksi ja toimittaa sitten tiedot sovellukselle käytettäväksi. Pohjimmiltaan sen avulla voit poimia erikoistietoja yleistetyn datan kokoelmasta.

Kuinka virrat toimivat

Virtaputki alkaa aina lähteestä. Lähteen tyyppi riippuu käsiteltävistä tiedoista, mutta kaksi suosituinta ovat taulukot ja kokoelmat.



Jos haluat muuttaa kokoelman alkuperäiseksi streamiksi, sinun on lisättävä stream () toiminto lähteelle. Tämä sijoittaa lähteen virtaputkeen, jossa useita erilaisia ​​välitoimintoja (kuten suodattaa() ja järjestellä() ) voi käyttää sitä.

Kun kaikki vaaditut välitoiminnot on suoritettu, voit ottaa käyttöön terminaalitoiminnon (kuten jokaiselle() ), joka tuottaa lähteestä aiemmin poimitut tiedot.





Elämä ilman virtoja

Java 8 julkaistiin vuonna 2014, mutta sitä ennen Java -kehittäjien oli vielä poimittava erikoistietoja yleistiedoista.

miksi kuva ei toimi Macissa

Oletetaan, että sinulla on luettelo satunnaisista merkeistä, jotka yhdistetään satunnaislukuihin ainutlaatuisten merkkiarvojen muodostamiseksi, mutta haluat vain arvot, jotka alkavat merkillä C ja haluat järjestää tuloksen nousevaan järjestykseen. Näin poistat tiedot ilman virtoja.





Aiheeseen liittyviä: Mitä sinun tarvitsee tietää merkkijonojen käyttämisestä Javassa

Esimerkki arvojen suodattamisesta ja lajittelemisesta ilman virtoja


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

Sinun on myös ilmoitettava ja alustettava taulukkoluettelo, käytätkö virtoja tai jotain muuta poimintamenetelmää. Sinun ei tarvitsisi tehdä mitään, jos käyttäisit virtoja, ilmoita uusi muuttuja, joka pitää vaaditut arvot, tai luo muut viisi plusriviä koodia yllä olevassa esimerkissä.

Aiheeseen liittyviä: Miten luodaan ja suoritetaan toimintoja Java -massoilla

Yllä oleva koodi tuottaa seuraavan tuloksen konsolissa:


C11
C12
C13
C14
C15
C16

Elämää virtojen kanssa

Ohjelmoinnissa tehokkuus tarkoittaa saman tuloksen tuottamista huomattavasti vähemmän koodia. Tämä on juuri se, mitä stream -putkilinja tekee ohjelmoijalle. Joten kun seuraavan kerran joku kysyy: miksi on tärkeää käyttää virtoja projektissasi? Yksinkertaisesti sanottuna: striimit tukevat tehokasta ohjelmointia.

Jatkamalla yllä olevaa esimerkkiämme, näin striimien käyttöönotto muuttaa koko ohjelman.

Arvojen suodatus ja lajittelu stream -esimerkin avulla


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

Yllä oleva koodi osoittaa, kuinka voimakas virtarajapinta on. Se ottaa luettelon satunnaisista matriisiarvoista ja muuntaa sen streamiksi käyttämällä stream () toiminto. Virta pienennetään sitten taulukkoluetteloksi, joka sisältää vaaditut arvot (eli kaikki arvot alkaen C ), käyttämällä suodattaa() toiminto.

Kuten yllä olevasta esimerkistä näet, C arvot on järjestetty satunnaisesti taulukkoluetteloon. Jos tulostaisit virran tässä vaiheessa, määritä arvo C15 tulostetaan ensin. Siksi järjestellä() -toiminto otetaan käyttöön stream -putkilinjassa uuden taulukon järjestämiseksi nousevaan järjestykseen.

Virtaputken viimeinen tehtävä on a jokaiselle() toiminto. Tämä on terminaalitoiminto, jota käytetään pysäyttämään virtaputki ja joka tuottaa seuraavat tulokset konsolissa:


C11
C12
C13
C14
C15
C16

Stream -välitoiminnot

Siellä on laaja luettelo välitoiminnoista, joita voidaan käyttää virtaputkessa.

Virtaputki alkaa aina yhdestä lähteestä ja a stream () funktio, ja se päättyy aina yhdellä terminaalitoiminnolla (vaikka valittavana on useita erilaisia.) Mutta näiden kahden osion välissä on luettelo kuudesta välitoiminnosta, joita voit käyttää.

Yllä olevassa esimerkissämme käytetään vain kahta näistä välitoimista --- suodattaa() ja järjestellä() . Valitsemasi välitoiminto riippuu tehtävistä, jotka haluat suorittaa.

Jos jokin edellä C -kirjaimella alkavista arvoista olisi pienillä kirjaimilla ja suorittaisimme samat välitoiminnot niille, saisimme seuraavan tuloksen.

Suodatus- ja lajittelutoimintojen suorittaminen pienillä arvoilla Esimerkki


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

Yllä oleva koodi tuottaa seuraavat arvot konsolissa:


C11
C12
C14
C15

Ainoa ongelma yllä olevan tuloksen kanssa on, että se ei tarkasti edusta kaikkia C arvoja taulukkoluettelossamme. Hyvä tapa korjata tämä pieni virhe on ottaa käyttöön toinen välitoiminto virtaputkeen; tämä operaatio tunnetaan nimellä kartta() toiminto.

Esimerkki karttatoiminnosta


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 kartta() toiminto muuttaa objektin tilasta toiseen; yllä olevassa esimerkissämme se muuttaa kaikki matriisiluettelon pienet merkit isoiksi kirjaimiksi.

Sijoittaminen kartta() toiminto juuri ennen suodattaa() -toiminto hakee kaikki arvot, jotka alkavat C taulukkoluettelosta.

Yllä oleva koodi tuottaa konsolissa seuraavan tuloksen, joka edustaa onnistuneesti kaikkia C arvot taulukkoluettelossa.


C11
C12
C13
C14
C15
C16

Kolme muuta välitoimintoa, joita voit käyttää sovelluksissasi, ovat:

  • kurkistaa()
  • raja()
  • ohita ()

Java 8 Streams helpottaa tehokkaan koodin luomista

Java 8 -virtojen avulla voit poimia erityisiä, oleellisia tietoja suuresta lähteestä yhdellä koodirivillä. Kunhan lisäät alkukirjaimen stream () toiminto ja päätelaiteoperaattori, voit käyttää mitä tahansa välitoimintojen yhdistelmää, joka tarjoaa sovituslähtöjä tavoitteeseesi.

kuinka voit tehdä oman snapchat -suodattimen

Jos mietit koodimme riviä, joka on meidän sisällämme suodattaa() toiminto; sitä kutsutaan 'lambda -ilmaisuksi'. Lambda -lausekkeet ovat toinen ominaisuus, joka on otettu käyttöön Java 8: ssa, ja siinä on paljon nuggetteja, jotka saattavat olla hyödyllisiä.

Jaa Jaa Tweet Sähköposti Nopea esittely Java 8 Lambdasta

Jos olet Java -ohjelmoija ja olet kiinnostunut oppimaan lisää Java 8 lambdasta, tässä artikkelissa tarkastelemme lähemmin lambdan syntaksia ja käyttöä.

Lue seuraava
Liittyvät aiheet
  • Ohjelmointi
  • Java
  • Koodausoppaat
Kirjailijasta Kadeisha Kean(21 artikkelia julkaistu)

Kadeisha Kean on täyspinoinen ohjelmistokehittäjä ja tekninen/teknologinen kirjoittaja. Hänellä on selkeä kyky yksinkertaistaa joitain monimutkaisimpia teknologisia käsitteitä; tuottaa materiaalia, jonka jokainen tekniikan aloittelija voi helposti ymmärtää. Hän on intohimoinen kirjoittamiseen, mielenkiintoisten ohjelmistojen kehittämiseen ja maailman matkustamiseen (dokumenttielokuvien kautta).

Lisää Kadeisha Keanilta

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi