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.