Bearbeiten und Entfernen eines Elements aus dem Stream

1. Übersicht

In diesem kurzen Tutorial lernen wir die verschiedenen Möglichkeiten kennen, wie wir ein Element in einem Java 8-Stream bearbeiten und nach Abschluss des Vorgangs entfernen können.

2. Setup

Definieren wir zuerst unser Item- Objekt. Dies ist ein einfaches Objekt mit einem einzelnen int- Feld.

Es verfügt über eine Methode, die anhand des internen Werts bestimmt, ob das Objekt für den Betrieb qualifiziert ist:

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

Jetzt können wir eine Quelle für unseren Stream erstellen, die eine Sammlung von Elementen sein kann:

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

3. Elemente filtern

In vielen Fällen können wir die Stream # -Filtermethode verwenden , wenn wir etwas mit einer Teilmenge von Elementen tun möchten , und wir müssen zuerst nichts entfernen:

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

4. Bedienen und Entfernen eines Elements

4.1. Collection.removeIf

Wir können Streams verwenden , um die Sammlung von Elementen zu iterieren und zu bearbeiten .

Mit Streams können wir Lambda-Funktionen anwenden, die als Prädikate bekannt sind . Um mehr über Streams und Prädikate zu erfahren , haben wir hier einen weiteren Artikel.

Wir können ein Prädikat erstellen , das bestimmt, ob ein Artikel für die Bearbeitung geeignet ist:

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

Unser Prädikat filtert die Elemente , mit denen wir arbeiten möchten:

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

Sobald wir die Elemente im Stream bearbeitet haben, können wir sie mit demselben Prädikat entfernen, das wir zuvor zum Filtern verwendet haben:

itemList.removeIf(isQualified);

Intern verwendet removeIf einen Iterator , um die Liste zu durchlaufen und die Elemente mithilfe des Prädikats abzugleichen . Wir können jetzt alle übereinstimmenden Elemente aus der Liste entfernen.

4.2. Collection.removeAll

Wir können auch eine andere Liste verwenden, um die Elemente zu speichern, die bearbeitet wurden, und sie dann aus der ursprünglichen Liste entfernen:

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

Im Gegensatz zu removeIf , das einen Iterator verwendet, verwendet removeAll eine einfache for-Schleife , um alle übereinstimmenden Elemente in der Liste zu entfernen.

5. Schlussfolgerung

In diesem Artikel haben wir uns mit einer Möglichkeit befasst, ein Element in Java 8-Streams zu bearbeiten und dann zu entfernen. Wir haben auch eine Möglichkeit gesehen, dies zu tun, indem wir eine zusätzliche Liste verwendet und alle übereinstimmenden Elemente entfernt haben.

Der Quellcode für dieses Tutorial und die relevanten Testfälle sind auf GitHub verfügbar.