Bruke og fjerne et element fra Stream

1. Oversikt

I denne raske opplæringen lærer vi om de forskjellige måtene vi kan operere på et element i en Java 8-strøm og deretter fjerne det når operasjonen er fullført.

2. Oppsett

La oss definere våre Punkt motstand først. Dette er et enkelt objekt med en enkelt int felt.

Den har en metode som bestemmer om objektet er kvalifisert for drift, basert på den interne verdien:

klasse Element {privat int verdi; // constructors public boolean isQualified () {returverdi% 2 == 0; } public void operate () {System.out.println ("Even Number"); }}

Nå kan vi opprette en kilde for vår Strøm som kan være en samling av Varer:

Listeliste = ny ArrayList (); for (int i = 0; i <10; i ++) {itemList.add (new Item (i)); }

3. Filtrering av gjenstander

I mange tilfeller, hvis vi ønsker å gjøre noe med en delmengde av elementer, kan vi bruke Stream # filter metode, og vi trenger ikke å fjerne noe først:

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

4. Betjening og fjerning av en vare

4.1. Collection.removeIf

Vi kan bruke Strømmer å gjenta og operere over innsamlingen av Varer.

Ved hjelp av Strømmer, kan vi bruke lambdafunksjoner kjent som Predikater. For å lese mer om Strømmer og Predikater, har vi en annen artikkel her.

Vi kan lage en Predikere som vil avgjøre om en Punkt kvalifiserer for å bli operert:

Predikere isQualified = element -> item.isQualified ();

Våre Predikere vil filtrere Varer som vi ønsker å operere på:

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

Når vi er ferdig med å operere elementene i strømmen, kan vi fjerne dem ved å bruke det samme Predikere vi brukte tidligere for filtrering:

itemList.removeIf (isQualified);

Internt, fjerneHvis bruker en Iterator å gjentas over listen og matche elementene ved hjelp av predikatet. Vi kan nå fjerne eventuelle samsvarende elementer fra listen.

4.2. Collection.removeAll

Vi kan også bruke en annen liste til å holde på elementene som har blitt operert, og deretter fjerne dem fra den opprinnelige listen:

List operatedList = new ArrayList (); itemList.stream () .filter (item -> item.isQualified ()) .forEach (item -> {item.operate (); operatedList.add (item);}); itemList.removeAll (operertListe);

I motsetning til fjerneHvis som bruker en Iterator, Fjern alle bruker en enkel for-loop for å fjerne alle samsvarende elementer i listen.

5. Konklusjon

I denne artikkelen så vi på en måte å operere på et element i Java 8 Streams og deretter fjerne det. Vi så også en måte å gjøre det på ved å bruke en tilleggsliste og fjerne alle samsvarende elementer.

Kildekoden for denne veiledningen og de aktuelle testtilfellene er tilgjengelig på GitHub.


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