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.