Betjening og fjernelse af et element fra Stream

1. Oversigt

I denne hurtige vejledning lærer vi om de forskellige måder, hvorpå vi kan betjene et element i en Java 8-strøm og derefter fjerne det, når operationen er afsluttet.

2. Opsætning

Lad os definere vores Vare objekt først. Dette er et simpelt objekt med en enkelt int Mark.

Det har en metode, der bestemmer, om objektet er kvalificeret til drift, baseret på den interne værdi:

klasse Element {privat int værdi; // konstruktører offentlig boolsk isQualified () {returværdi% 2 == 0; } public void operate () {System.out.println ("Even Number"); }}

Nu kan vi oprette en kilde til vores Strøm som kan være en samling af Varer:

Liste itemList = ny ArrayList (); for (int i = 0; i <10; i ++) {itemList.add (nyt element (i)); }

3. Filtrering af emner

I mange tilfælde, hvis vi vil gøre noget med en delmængde af emner, kan vi bruge Stream # filter metode, og vi behøver ikke fjerne noget først:

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

4. Betjening og fjernelse af et emne

4.1. Collection.removeIf

Vi kan bruge Strømme at gentage og betjene indsamlingen af Varer.

Ved brug af Strømme, kan vi anvende lambda-funktioner kendt som Predikater. For at læse mere om Strømme og Predikater, vi har en anden artikel her.

Vi kan oprette en Prædikat der ville afgøre, om en Vare kvalificerer sig til at blive opereret:

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

Vores Prædikat vil filtrere Varer som vi ønsker at operere på:

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

Når vi er færdige med at arbejde på elementerne i strømmen, kan vi fjerne dem ved hjælp af det samme Prædikat vi brugte tidligere til filtrering:

itemList.removeIf (isQualified);

Internt, fjerneHvis bruger en Iterator for at gentage listen og matche elementerne ved hjælp af prædikatet. Vi kan nu fjerne eventuelle matchende elementer fra listen.

4.2. Collection.remAll

Vi kan også bruge en anden liste til at holde de elementer, der er blevet opereret, og derefter fjerne dem fra den oprindelige liste:

Liste opereretListe = ny ArrayList (); itemList.stream () .filter (item -> item.isQualified ()) .forEach (item -> {item.operate (); operatedList.add (item);}); itemList.removeAll (operatedList);

I modsætning til fjerneHvis der bruger en Iterator, Fjern alt bruger en simpel for-loop for at fjerne alle de matchende elementer på listen.

5. Konklusion

I denne artikel kiggede vi på en måde at betjene et element i Java 8 Streams på og derefter fjerne det. Vi så også en måde at gøre det på ved at bruge en ekstra liste og fjerne alle de matchede elementer.

Kildekoden til denne vejledning og de relevante testtilfælde findes på GitHub.


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