Prevádzka a odstránenie položky zo streamu

1. Prehľad

V tomto rýchlom výučbe sa dozvieme o rôznych spôsoboch, ako môžeme pracovať s položkou v prúde Java 8, a potom ju po dokončení operácie odstrániť.

2. Inštalácia

Definujme si svoje Položka najskôr objekt. Jedná sa o jednoduchý objekt s jedným int lúka.

Má metódu, ktorá na základe internej hodnoty určuje, či je objekt kvalifikovaný na prevádzku:

trieda Položka {private int hodnota; // konštruktory public boolean isQualified () {návratová hodnota% 2 == 0; } public void operovat () {System.out.println ("sude cislo"); }}

Teraz môžeme vytvoriť zdroj pre naše Prúd čo môže byť zbierka Položky:

Zoznam itemList = nový ArrayList (); pre (int i = 0; i <10; i ++) {itemList.add (nová položka (i)); }

3. Filtrovanie položiek

V mnohých prípadoch, ak chceme niečo urobiť s podmnožinou položiek, môžeme použiť Stream # filter a nemusíme najskôr nič odstraňovať:

itemList.stream () .filter (item -> item.isQualified ()) ...

4. Prevádzka a odstránenie položky

4.1. Zbierka.odstrániťIf

Môžeme použiť Prúdy iterovať a pracovať nad zbierkou Položky.

Použitím Prúdy, môžeme použiť lambda funkcie známe ako Predikáty. Čítať viac o Prúdy a Predikáty, máme tu ďalší článok.

Môžeme vytvoriť Predikát to by určilo, či Položka spĺňa podmienky na prevádzku:

Predikát isQualified = položka -> item.isQualified ();

Náš Predikát vyfiltruje Položky na ktorom chceme operovať:

itemList.stream () .filter (isQualified) .forEach (item -> item.operate ());

Po dokončení operácií s položkami v streame ich môžeme pomocou rovnakej položky odstrániť Predikát predtým sme použili na filtrovanie:

itemList.removeIf (isQualified);

Interne, removeIf používa Iterátor iterovať zoznam a porovnávať prvky pomocou predikátu. Teraz môžeme zo zoznamu odstrániť všetky zodpovedajúce prvky.

4.2. Zbierka.odstrániťVšetko

Môžeme tiež použiť iný zoznam na uchovanie prvkov, ktoré boli operované, a potom ich môžeme odstrániť z pôvodného zoznamu:

Zoznam ovládanýchList = new ArrayList (); itemList.stream () .filter (item -> item.isQualified ()) .forEach (item -> {item.operate () ;operListList.add (item);}); itemList.removeAll (operovaný zoznam);

Na rozdiel od removeIf ktorý používa iterátor, odobrať všetky používa jednoduchý pre-slučku na odstránenie všetkých zodpovedajúcich prvkov v zozname.

5. Záver

V tomto článku sme sa pozreli na spôsob fungovania na položke v Java 8 Streams a jej následnom odstránení. Tiež sme videli spôsob, ako to urobiť, keď sme použili dodatočný zoznam a odstránili všetky zhodné prvky.

Zdrojový kód tohto tutoriálu a príslušné testovacie prípady sú k dispozícii na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found