Filtern von Elementen mit der Filter()-Methode
Beim Arbeiten mit Datensammlungen in Java besteht häufig die Notwendigkeit, bestimmte Elemente zu extrahieren, die bestimmte Bedingungen erfüllen. Traditionell erfordert dies Schleifen und Bedingungsanweisungen, wodurch der Code umfangreicher wird. Hier kommt die filter()-Methode zum Einsatz.
Sie haben diese Methode bereits in unseren Beispielen verwendet, aber wir haben noch nicht im Detail besprochen, welches Argument sie erwartet. Sie akzeptiert eine funktionale Schnittstelle Predicate<T>, die definiert, ob ein Element im resultierenden Stream enthalten sein soll.
Stream<T> filter(Predicate<? super T> predicate);
Hierbei ist T der Typ der Elemente im Stream, und Predicate<? super T> ist die Filterbedingung, die verwendet wird, um jedes Element zu überprüfen.
Praktische Anwendung
Angenommen, es gibt eine Liste von Mitarbeitern, jeweils mit einem name und yearsOfExperience im Unternehmen. Es sollen nur diejenigen ausgewählt werden, die seit mehr als 5 Jahren im Unternehmen sind, um ihnen einen Bonus oder zusätzliche Leistungen anzubieten.
Main.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; class Employee { private final String name; private final int yearsOfExperience; public Employee(String name, int yearsOfExperience) { this.name = name; this.yearsOfExperience = yearsOfExperience; } public String getName() { return name; } public int getYearsOfExperience() { return yearsOfExperience; } @Override public String toString() { return name + " (" + yearsOfExperience + " years)"; } } public class Main { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("John", 6), new Employee("Sarah", 4), new Employee("Mike", 7), new Employee("Anna", 3), new Employee("Tom", 8) ); // Filtering employees with more than 5 years of experience List<Employee> experiencedEmployees = employees.stream() .filter(e -> e.getYearsOfExperience() > 5) .toList(); System.out.println("Experienced employees: " + experiencedEmployees); } }
In diesem Beispiel wird ein Stream von Mitarbeitern mit stream() erstellt. Anschließend werden mit der filter-Methode diejenigen Mitarbeiter herausgefiltert, die mehr als 5 Jahre Berufserfahrung haben.
Das Ergebnis ist eine neue Liste, die nur die Mitarbeiter enthält, welche diese Bedingung erfüllen.
Wann filter verwenden
In den meisten Fällen ist es sinnvoll, filter() am Anfang zu verwenden, um die Datenmenge für nachfolgende Operationen zu reduzieren. Dies verbessert die Leistung, da spätere Operationen auf einem kleineren Datensatz ausgeführt werden.
Beispiel
Wenn eine Liste von Mitarbeitern vorliegt und zunächst diejenigen mit mehr als 5 Jahren Berufserfahrung herausgefiltert werden sollen, bevor die verbleibenden Mitarbeiter in ein anderes Format umgewandelt werden, empfiehlt es sich, mit dem Filtern zu beginnen.
List<Employee> result = employees.stream()
.filter(e -> e.getYearsOfExperience() > 5) // First, `filter`
.map(e -> e.getName()) // Then apply other operations
.toList();
Wie Sie in diesem Beispiel sehen, wird die filter()-Methode vor der map()-Methode platziert, da dadurch zunächst die Anzahl der zu verarbeitenden Elemente reduziert wird. Es werden Mitarbeiter mit mehr als 5 Jahren Berufserfahrung gefiltert und anschließend deren Namen extrahiert.
Diese Reihenfolge der Operationen ist effizient, da sie eine unnötige Datenverarbeitung während der Transformation verhindert.
1. Was macht die filter()-Methode in der Stream API?
2. Welchen Argumenttyp akzeptiert die Methode filter()?
3. Was passiert, wenn Sie in der Methode filter() eine Bedingung verwenden, die immer false zurückgibt?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 2.33
Filtern von Elementen mit der Filter()-Methode
Swipe um das Menü anzuzeigen
Beim Arbeiten mit Datensammlungen in Java besteht häufig die Notwendigkeit, bestimmte Elemente zu extrahieren, die bestimmte Bedingungen erfüllen. Traditionell erfordert dies Schleifen und Bedingungsanweisungen, wodurch der Code umfangreicher wird. Hier kommt die filter()-Methode zum Einsatz.
Sie haben diese Methode bereits in unseren Beispielen verwendet, aber wir haben noch nicht im Detail besprochen, welches Argument sie erwartet. Sie akzeptiert eine funktionale Schnittstelle Predicate<T>, die definiert, ob ein Element im resultierenden Stream enthalten sein soll.
Stream<T> filter(Predicate<? super T> predicate);
Hierbei ist T der Typ der Elemente im Stream, und Predicate<? super T> ist die Filterbedingung, die verwendet wird, um jedes Element zu überprüfen.
Praktische Anwendung
Angenommen, es gibt eine Liste von Mitarbeitern, jeweils mit einem name und yearsOfExperience im Unternehmen. Es sollen nur diejenigen ausgewählt werden, die seit mehr als 5 Jahren im Unternehmen sind, um ihnen einen Bonus oder zusätzliche Leistungen anzubieten.
Main.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; class Employee { private final String name; private final int yearsOfExperience; public Employee(String name, int yearsOfExperience) { this.name = name; this.yearsOfExperience = yearsOfExperience; } public String getName() { return name; } public int getYearsOfExperience() { return yearsOfExperience; } @Override public String toString() { return name + " (" + yearsOfExperience + " years)"; } } public class Main { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("John", 6), new Employee("Sarah", 4), new Employee("Mike", 7), new Employee("Anna", 3), new Employee("Tom", 8) ); // Filtering employees with more than 5 years of experience List<Employee> experiencedEmployees = employees.stream() .filter(e -> e.getYearsOfExperience() > 5) .toList(); System.out.println("Experienced employees: " + experiencedEmployees); } }
In diesem Beispiel wird ein Stream von Mitarbeitern mit stream() erstellt. Anschließend werden mit der filter-Methode diejenigen Mitarbeiter herausgefiltert, die mehr als 5 Jahre Berufserfahrung haben.
Das Ergebnis ist eine neue Liste, die nur die Mitarbeiter enthält, welche diese Bedingung erfüllen.
Wann filter verwenden
In den meisten Fällen ist es sinnvoll, filter() am Anfang zu verwenden, um die Datenmenge für nachfolgende Operationen zu reduzieren. Dies verbessert die Leistung, da spätere Operationen auf einem kleineren Datensatz ausgeführt werden.
Beispiel
Wenn eine Liste von Mitarbeitern vorliegt und zunächst diejenigen mit mehr als 5 Jahren Berufserfahrung herausgefiltert werden sollen, bevor die verbleibenden Mitarbeiter in ein anderes Format umgewandelt werden, empfiehlt es sich, mit dem Filtern zu beginnen.
List<Employee> result = employees.stream()
.filter(e -> e.getYearsOfExperience() > 5) // First, `filter`
.map(e -> e.getName()) // Then apply other operations
.toList();
Wie Sie in diesem Beispiel sehen, wird die filter()-Methode vor der map()-Methode platziert, da dadurch zunächst die Anzahl der zu verarbeitenden Elemente reduziert wird. Es werden Mitarbeiter mit mehr als 5 Jahren Berufserfahrung gefiltert und anschließend deren Namen extrahiert.
Diese Reihenfolge der Operationen ist effizient, da sie eine unnötige Datenverarbeitung während der Transformation verhindert.
1. Was macht die filter()-Methode in der Stream API?
2. Welchen Argumenttyp akzeptiert die Methode filter()?
3. Was passiert, wenn Sie in der Methode filter() eine Bedingung verwenden, die immer false zurückgibt?
Danke für Ihr Feedback!