veröffentlicht am: 07.07.2022 zuletzt aktualisiert am: 05.02.2023
Java unterstützt mehrere fortgeschrittene Techniken, mit denen das volle Potenzial von Streams und Lambda-Ausdrücken genutzt werden kann. Eine dieser Methoden ist die Java Stream filter()-Methode, die Daten aus einem Stream entgegennimmt und eine neue Liste, Sammlung oder Array-Liste erzeugt, nachdem die Elemente anhand der angegebenen Bedingung gefiltert wurden.
In diesem Beitrag wird die Funktionsweise der Java Stream filter()-Methode anhand von geeigneten Beispielen erläutert. So, lass uns loslegen!
Bei der Arbeit mit Streams verwenden die Java-Entwickler meist die Stream filter() Methode. Die Java Stream filter()-Methode iteriert durch den Stream und filtert die Elemente heraus, die der definierten Bedingung oder dem Lambda-Ausdruck entsprechen. Es handelt sich um eine Operation, die in der Mitte der Stream-Schnittstelle stattfindet.
Stream<T> filter(Predicate<? super T> condition)
Hier ist Stream eine Schnittstelle, Predicate ist eine funktionale Schnittstelle, die einen Lambda-Ausdruck oder eine Test-Bedingung darstellt, filter() ist eine zwischengeschaltete Stream-Operation, die zum Herausfiltern der Elemente aus dem gegebenen Stream verwendet wird.
Werfen wir nun einen Blick auf einige Beispiele für die Implementierung der Java Stream filter() Methode.
Zunächst werden wir die Klassen java.util.Arrays und java.util.List in unser Programm importieren:
import java.util.Arrays; import java.util.List;
Im nächsten Schritt erstellen wir mit der Methode Arrays.asList() eine Liste fester Größe und übergeben ihr einige Zahlen als Elemente. Danach rufen wir die Java-Methode list.stream().filter() auf und übergeben den Lambda-Ausdruck y -> y % 4 == 0 als Inline-Prädikat:
import java.util.Arrays; import java.util.List; public class Main { public static void main(String args[]) { List < Integer > list = Arrays.asList(45, 32, 16, 35, 28, 29, 56); list.stream().filter(y - > y % 4 == 0).forEach(System.out::println); } }
Wenn die Operation der Iteration über den Zahlenstrom beginnt, werden alle Zahlen, die den hinzugefügten Ausdruck y -> y % 4 == 0 erfüllen, aus dem Stream herausgesucht und im Konsolenfenster ausgegeben:
Man kann die Java-Stream-Methode filter() auch verwenden, um Listenelemente auf der Grundlage einer Bedingung oder eines Lambda-Ausdrucks zu filtern und dann die abgerufene Sammlung in einer anderen Liste zu speichern.
Dazu muss man zunächst die Klasse java.util.stream.Collectors importieren:
import java.util.stream.Collectors;
Dann werden wir im selben Programm nur die Methode collect(Collectors.toList()) verwenden, um den Strom der gefilterten Zahlen als Vielfache von 4 in einem neuen Integer-Typ list zu sammeln:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String args[]) { List < Integer > list = Arrays.asList(45, 32, 16, 35, 28, 29, 56); List < Integer > vielfaches = list.stream().filter(y - > y % 4 == 0).collect(Collectors.toList()); System.out.println(vielfaches); } }
Die gegebene Ausgabe bedeutet, dass wir die Vielfachen von 4 mit Hilfe der Java Stream filter() Methode erfolgreich gefiltert und in einer neuen Liste gesammelt haben:
Wir werden nun ein Custom Predicate anstelle des Lambda-Ausdrucks verwenden. Zu diesem Zweck importieren wir die Klasse java.util.function.Predicate:
import java.util.function.Predicate;
Als nächstes erstellen wir die gewünschte Liste von Zahlen. Danach definieren wir eine testBedingung, indem wir die Java Methode public boolean test() überschreiben, um zu prüfen, ob der Java Modulus % einer Zahl gleich Null ist oder nicht. Diese Methode wird true zurückgeben, wenn die Zahl ein Vielfaches von 4 ist; andernfalls wird der Rückgabewert auf false gesetzt:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.function.Predicate; public class Main { public static void main(String args[]) { List < Integer > list = Arrays.asList(45, 32, 16, 35, 28, 29, 56); Predicate < Integer > testBedingung = new Predicate < Integer > () { @Override public boolean test(Integer y) { if (y % 4 == 0) { return true; } return false; } }; list.stream().filter(testBedingung).forEach(System.out::println); } }
Bei der Ausführung des oben genannten Programms wird die in der Methode list.stream().filter() angegebene testBedingung verwendet, um die Vielfachen von 4 aus der erstellten list zu holen. Erfahre mehr über boolesche Werte in Java oder auch über die Override Annotation.
Das waren alle wesentlichen Informationen über die Java Stream filter() Methode. Du kannst bei Bedarf noch weiter recherchieren.
Die Java Stream filter()-Methode iteriert durch den Stream und filtert die Elemente heraus, die nicht der definierten Bedingung oder dem Lambda-Ausdruck entsprechen. Es handelt sich um eine Operation, die in der Mitte der Stream-Schnittstelle stattfindet. Man kann die Java Stream filter()-Methode mit Lambda-Ausdrücken und Testbedingungen verwenden, um Elemente zu filtern und sie in einer neuen Sammlung zu speichern. In diesem Beitrag wurde die Funktionsweise der filter()-Methode von Java Stream anhand geeigneter Beispiele erläutert.
😩 Gelangweilt von den Udemy & YouTube-Tutorials?!
Lerne spielerisch Java und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.
"Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."
- Lennart Sparbier
100% kostenlos registrieren · keine Kreditkarte notwendig
Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.
100% kostenlos registrieren · keine Zahlungsdaten notwendig