A Java 8 adatfolyamok lehetővé teszik a fejlesztők számára, hogy pontos adatokat nyerjenek ki egy nagy gyűjteményből, előre meghatározott műveletek segítségével.
A Java 8 megjelenése előtt a Java-ban a "stream" kifejezés használata automatikusan társulna az I / O-hoz. A Java 8 azonban bevezetett egy olyan folyamot, amelyet számítási lépések halmazának nevezhetünk, amelyek összekapcsolódnak az úgynevezett "folyamvezetékként".
Ez a cikk bemutatja a Java 8 folyamokat, és bemutatja, hogyan lehetnek hasznosak a projektjeiben.
Mi az a patak?
Az adatfolyam egy Java felület, amely forrást vesz fel, műveleteket hajt végre meghatározott adatok kinyerésére, majd ezeket az adatokat felhasználás céljából átadja az alkalmazásnak. Lényegében lehetővé teszi speciális adatok kinyerését egy általánosított adatgyűjteményből.
Hogyan működnek a folyamok
A folyamvezeték mindig egy forrással kezdődik. A forrás típusa függ az Ön adattípusától, de a legnépszerűbbek közül kettő tömb és gyűjtemény.
A gyűjtemény kezdeti adatfolyamgá alakításához hozzá kell adnia a
folyam() funkció a forráshoz. Ez a forrást a folyamvezetékbe helyezi, ahol több különböző közbenső művelet (például szűrő() és fajta()) működhet rajta.Miután elvégezte az összes szükséges közbenső műveletet, bevezethet egy terminál műveletet (például az egyes()), amely előállítja a forrásból korábban kinyert adatokat.
Élet patakok nélkül
A Java 8 2014-ben jelent meg, de előtte a Java fejlesztőknek még mindig speciális adatokat kellett kinyerniük egy általános adatgyűjteményből.
Tegyük fel, hogy van egy véletlenszerű karakterek listája, amelyeket véletlenszerű számokkal kombinálva egyedi karaktersorozatok jönnek létre, de csak azokat az értékeket szeretné megkapni, amelyek a „C” karakterrel kezdődnek, és az eredményt növekvő sorrendben szeretné rendezni rendelés. Így nyerné ki ezeket az adatokat streamek nélkül.
Összefüggő: Mit kell tudni a karakterláncok Java használatáról
Értékek szűrése és rendezése folyamok nélkül Példa
import java.util. Tömb lista;
import java.util. Tömbök;
import java.util. Lista;
nyilvános osztály Fő {
public static void main (String [] érvel) {
// deklarálja és inicializálja a tömblistát
Lista 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"
);
// deklarálja, hogy a tömblista tárolja a szükséges értékeket
Lista requiredValues = new ArrayList <> ();
// a szükséges értékek kibontása és tárolása a reqquiredValues fájlban
randomValues.forEach (érték -> {
if (value.startsWith ("C")) {
requiredValues.add (érték);
}
});
// növekvő sorrendben rendezi a requiredValues értékeket
requiredValues.sort ((Karakterlánc értéke1, Karakterlánc értéke2) -> érték1.compareTo (érték2));
// minden értéket kinyomtat a konzolra
requiredValues.forEach ((String érték) -> System.out.println (érték));
}
}
Ezenkívül deklarálnod és inicializálnod kell a tömblistát, függetlenül attól, hogy streameket vagy más kivonatolási módot használsz. Amit nem kellene tennie, ha streameket használna, az az, hogy deklaráljon egy új változót a szükséges értékek megtartására, és ne hozza létre a másik öt plusz kódsorot a fenti példában.
Összefüggő: Hogyan lehet műveleteket létrehozni és végrehajtani a Java tömbökön
A fenti kód a következő kimenetet hozza létre a konzolon:
C11
C12
C13
C14
C15
C16
Élet patakokkal
A programozásban a hatékonyság azt jelenti, hogy ugyanazt az eredményt érjük el lényegesen kevesebb kóddal. A stream-folyamat pontosan ezt teszi egy programozó számára. Tehát amikor legközelebb valaki azt kérdezi: "miért fontos a streameket használni a projektben?" Egyszerűen fogalmazva: „az adatfolyamok támogatják a hatékony programozást.”
Folytatva a fenti példánkat, a streamek bevezetése így alakítja át az egész programot.
Értékek szűrése és rendezése adatfolyam-példával
import java.util. Tömbök;
import java.util. Lista;
nyilvános osztály Fő {
public static void main (String [] érvel) {
// deklarálja és inicializálja a tömblistát
Lista 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"
);
// csak a C betűvel kezdődő értékeket tölti le, rendezi és kinyomtatja a konzolra.
randomValues.stream (). filter (érték-> value.startsWith ("C")). rendezve (). forEach (System.out:: println);
}
}
A fenti kód megmutatja, hogy a stream felület milyen erős. Elveszi a véletlen tömb értékek listáját, és a folyam() funkció. A folyamot ezután egy tömblistára redukáljuk, amely tartalmazza a szükséges értékeket (ez az összes kezdőérték C), használni a szűrő() funkció.
Amint a fenti példában láthatja, a C az értékeket véletlenszerűen rendezzük el a tömblistában. Ha a folyamatot ezen a ponton nyomtatná, az értéket C15 először kinyomtatnák. Ezért a fajta() funkció kerül bevezetésre a folyamatvezetékbe az új tömb növekvő sorrendben történő átrendezéséhez.
A folyamvezetékben a végső funkció a az egyes() funkció. Ez egy olyan terminálfunkció, amelyet a folyam leállításához használnak, és a következő eredményeket hozza létre a konzolon:
C11
C12
C13
C14
C15
C16
Van egy átfogó lista a közvetített műveletekről, amelyek felhasználhatók egy folyamvezetékben.
A folyamvezeték mindig egyetlen forrásból indul, és a folyam() függvény, és mindig egyetlen terminál művelettel végződik (bár több különböző is létezik válasszon.) De e két szakasz között egy hat közbenső művelet szerepel, amelyeket megtehet használat.
A fenti példánkban ezek közül a közbenső műveletek közül csak kettőt használunkszűrő() és fajta(). A választott közbenső művelet a végrehajtani kívánt feladatoktól függ.
Ha a fenti tömblistánkban a „C” betűvel kezdődő értékek bármelyike kisbetűvel szerepelne, és ugyanazokat a köztes műveleteket hajtanánk végre rajtuk, akkor a következő eredményt kapnánk.
Példa a kisbetűs értékek szűrési és rendezési műveleteire
import java.util. Tömbök;
import java.util. Lista;
nyilvános osztály Fő {
public static void main (String [] érvel) {
// deklarálja és inicializálja a tömblistát
Lista 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"
);
// csak a C betűvel kezdődő értékeket tölti le, rendezi és kinyomtatja a konzolra.
randomValues.stream (). filter (érték-> value.startsWith ("C")). rendezve (). forEach (System.out:: println);
}
}
A fenti kód a következő értékeket hozza létre a konzolon:
C11
C12
C14
C15
Az egyetlen probléma a fenti kimenettel az, hogy nem pontosan reprezentálja az összes C értékek a tömblistánkban. A kis hiba kijavításának jó módja egy másik közbenső művelet bevezetése a folyamvezetékbe; ez a művelet a térkép() funkció.
A Térkép funkció példa használata
import java.util. Tömbök;
import java.util. Lista;
nyilvános osztály Fő {
public static void main (String [] érvel) {
// deklarálja és inicializálja a tömblistát
Lista 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"
);
// az összes kisbetűt nagybetűvé alakítja,
// csak a C betűvel kezdődő értékeket tölti le, rendezi és kinyomtatja a konzolra.
randomValues.stream (). map (String:: toUpperCase) .filter (érték-> value.startsWith ("C")). rendezve (). forEach (System.out:: println);
}
}
A térkép() függvény átalakítja az objektumot egyik állapotból a másikba; a fenti példánkban a tömblista összes kisbetűjét nagybetűvé alakítja.
A térkép() funkció közvetlenül a szűrő() függvény beolvassa az összes kezdő értéket C a tömb listából.
A fenti kód a következő eredményt hozza létre a konzolon, és sikeresen képviseli az összes C értékeket a tömb listában.
C11
C12
C13
C14
C15
C16
A másik három közbenső művelet, amelyet az alkalmazásaiban használhat:
- kandikál()
- határ()
- kihagy ()
A Java 8 adatfolyamok megkönnyítik a hatékony kód létrehozását
A Java 8 adatfolyamokkal extra specifikus, releváns adatokat nyerhet ki egy nagy forrásból egyetlen kódsorral. Mindaddig, amíg a kezdőbetűt tartalmazza folyam() függvény és egy terminál operátor segítségével bármilyen köztes művelet kombinációját használhatja, amelyek megfelelő kimenetet biztosítanak a célhoz.
Ha kíváncsi a kódsorunkra, szűrő() funkció; "lambda kifejezés" néven ismert. A Lambda kifejezések egy másik, a Java 8-zal bevezetett szolgáltatás, és rengeteg rögtöt tartalmaz, amelyeket hasznosnak találhat.
Ha Java programozó vagy, és többet szeretnél megtudni a Java 8 lambdákról, ebben a cikkben közelebbről megvizsgáljuk a lambda szintaxisát és használatát.
Olvassa el a következőt
- Programozás
- Jáva
- Kódolási oktatóanyagok
Kadeisha Kean Full-Stack szoftverfejlesztő és műszaki / technológiai író. Különleges képessége van a legösszetettebb technológiai koncepciók egyszerűsítésére; bármilyen technológiai kezdő számára könnyen érthető anyag előállítása. Szenvedélyes az írás, az érdekes szoftverek fejlesztése és a világ körüli utazás (dokumentumfilmek révén).
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz, amely műszaki tippeket, véleményeket, ingyenes e-könyveket és exkluzív ajánlatokat tartalmaz!
Még egy lépés…!
Kérjük, erősítse meg e-mail címét az imént elküldött e-mailben.