Hogyan juthatok hozzá egy adatfolyam utolsó eleméhez a Java-ban?
1. Áttekintés
A Java Folyam Az API volt a Java 8 kiadás fő jellemzője. Patakok lustán értékelt objektumszekvenciákat képviselnek, és gazdag, gördülékeny és monádikus szerű API-t biztosítanak.
Ebben a cikkben gyorsan áttekintjük az a. Utolsó elemének megszerzésének módjait Folyam. Tartsd észben, hogy a folyamok jellege miatt ez nem természetes művelet. Mindig győződjön meg arról, hogy nem végtelenül dolgozik Patakok.
2. A Csökkentse API
Csökkentse, egyszerűen fogalmazva, csökkenti az a-elemek halmazát Folyam egyetlen elemre.
Ebben az esetben csökkentjük az elemek halmazát, hogy megkapjuk az utolsó fn elemet Folyam. Tartsd észben, hogy ez a módszer csak szekvenciális eredményeket ad vissza Patakok.
Használjuk a Lista nak,-nek Húr értékeket, kapja meg a Folyam tól Lista majd csökkentse:
List valueList = new ArrayList (); valueList.add ("Joe"); valueList.add ("John"); valueList.add ("Sean"); Stream stream = valueList.stream (); stream.reduce ((első, második) -> második) .vagyElse (null);
Itt az adatfolyam olyan szintre csökken, ahol csak az utolsó elem marad. Ha a patak üres, akkor a nulla érték.
2. Az Ugrás funkció használata
A folyam utolsó elemének megszerzésének másik módja az az összes elem kihagyásával előtte. Ezt a Ugrás funkciója Folyam osztály. Ne feledje, hogy ebben az esetben a Folyam kétszer, így egyértelmű teljesítményhatás érhető el.
Hozzunk létre egy Lista karakterlánc értékeit, és használja a méret függvény meghatározza, hogy hány elemet kell kihagyni, hogy elérje az utolsó elemet.
Itt van a példa kód, amely az utolsó elemet használja kihagy:
List valueList = new ArrayList (); valueList.add ("Joe"); valueList.add ("John"); valueList.add ("Sean"); long count = valueList.stream (). count (); Stream stream = valueList.stream (); stream.skip (count - 1) .findFirst (). get ();
„Sean” végül az utolsó elem lesz.
4. A végtelen adatfolyam utolsó elemének megszerzése
Ha megpróbálja megszerezni a végtelen áramlat utolsó elemét, akkor a végtelen elemzés végtelen sorrendjéhez vezetne. Mindkét kihagy és csökkenteni nem tér vissza az értékelés végrehajtásából, hacsak nem korlátozzuk a végtelen folyamot egy meghatározott számú elemre a használatával határ művelet.
Itt van a példa kód, ahol végtelen adatfolyamot vettünk és megpróbáltuk megszerezni az utolsó elemet:
Stream stream = Stream.iterate (0, i -> i + 1); stream.reduce ((első, második) -> második) .vagyElse (null);
Következésképpen az adatfolyam nem jön vissza az értékelésből, és végül az lesz a program végrehajtásának leállítása.
5. Következtetés
Különböző módokat láttunk az a. Utolsó elemének megszerzésére Folyam mindkettő használ csökkenteni és Ugrás API-k. Megvizsgáltuk azt is, hogy ez miért nem lehetséges végtelen adatfolyamokkal.
Láttuk, hogy az utolsó elem megszerzése a Folyam nem könnyű összehasonlítani más adatszerkezetekből. Ennek oka a Patakok amelyek nem kerülnek kiértékelésre, hacsak nem hívják meg a terminálfunkciót és soha nem tudjuk, hogy a jelenleg értékelt elem az utolsó.
A kódrészletek megtalálhatók a GitHubon.