Werken aan en verwijderen van een item uit een stream

1. Overzicht

In deze korte tutorial leren we over de verschillende manieren waarop we een item in een Java 8-stream kunnen bewerken en vervolgens verwijderen zodra de bewerking is voltooid.

2. Installatie

Laten we onze definiëren Item object eerst. Dit is een eenvoudig object met een enkele int veld.

Het heeft een methode die bepaalt of het object geschikt is voor gebruik, op basis van de interne waarde:

class Item {private int waarde; // constructors public boolean isQualified () {retourwaarde% 2 == 0; } public void operation () {System.out.println ("Even Number"); }}

Nu kunnen we een bron maken voor onze Stroom die een verzameling kan zijn van Artikelen:

List itemList = nieuwe ArrayList (); voor (int i = 0; i <10; i ++) {itemList.add (nieuw item (i)); }

3. Items filteren

Als we iets willen doen met een subset van items, kunnen we in veel gevallen de Stream # filter methode, en we hoeven niets eerst te verwijderen:

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

4. Een item bedienen en verwijderen

4.1. Collectie.removeIf

We kunnen gebruiken Streams om de verzameling van Artikelen.

Gebruik makend van Streamskunnen we lambda-functies toepassen die bekend staan ​​als Predikaten. Om er meer over te lezen Streams en Predikaten, we hebben hier nog een artikel.

We kunnen een Predikaat dat zou bepalen of een Item komt in aanmerking om te worden geopereerd op:

Predikaat isQualified = item -> item.isQualified ();

Onze Predikaat filtert de Artikelen waarop we willen opereren:

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

Zodra we klaar zijn met het bewerken van de items in de stream, kunnen we ze met dezelfde verwijderen Predikaat we gebruikten eerder voor het filteren:

itemList.removeIf (isQualified);

Intern, removeIf gebruikt een Iterator om de lijst te herhalen en de elementen te matchen met behulp van het predikaat. We kunnen nu alle overeenkomende elementen uit de lijst verwijderen.

4.2. Collectie.removeAll

We kunnen ook een andere lijst gebruiken om de elementen waarop is geopereerd te bewaren en ze vervolgens van de oorspronkelijke lijst verwijderen:

ListusedList = nieuwe ArrayList (); itemList.stream () .filter (item -> item.isQualified ()) .forEach (item -> {item.operate (); poweredList.add (item);}); itemList.removeAll (OperatedList);

in tegenstelling tot removeIf die een Iterator gebruikt, Verwijder alles maakt gebruik van een eenvoudig for loop om alle overeenkomende elementen in de lijst te verwijderen.

5. Conclusie

In dit artikel hebben we gekeken naar een manier om een ​​item in Java 8 Streams te bewerken en vervolgens te verwijderen. We zagen ook een manier om dit te doen door een extra lijst te gebruiken en alle overeenkomende elementen te verwijderen.

De broncode voor deze tutorial en de relevante testcases zijn beschikbaar op GitHub.