Elementen Filteren met de filter()-Methode
Bij het werken met gegevensverzamelingen in Java is het vaak nodig om specifieke elementen te selecteren die aan bepaalde voorwaarden voldoen. Traditioneel vereist dit lussen en voorwaardelijke instructies, waardoor de code uitgebreider wordt. De filter()-methode biedt hiervoor een oplossing.
Deze methode is al gebruikt in onze voorbeelden, maar we hebben nog niet in detail besproken wat deze als argument accepteert. Het accepteert een functionele interface Predicate<T>, die bepaalt of een element moet worden opgenomen in de resulterende stream.
Stream<T> filter(Predicate<? super T> predicate);
Hier is T het type van de elementen in de stream, en Predicate<? super T> is de filtervoorwaarde die wordt gebruikt om elk element te controleren.
Praktische Toepassing
Stel, je hebt een lijst met werknemers, elk met een name en yearsOfExperience in het bedrijf. Je wilt alleen degenen selecteren die langer dan 5 jaar bij het bedrijf werken om hen een bonus of extra voordelen aan te bieden.
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 dit voorbeeld wordt een stream van werknemers gemaakt met behulp van stream(). Vervolgens worden met de filter-methode de werknemers gefilterd die meer dan 5 jaar ervaring hebben.
Het resultaat is een nieuwe lijst die alleen die werknemers bevat die aan deze voorwaarde voldoen.
Wanneer filter gebruiken
In de meeste gevallen is het beter om filter() aan het begin te gebruiken om de hoeveelheid gegevens voor volgende bewerkingen te verminderen. Dit verbetert de prestaties omdat latere bewerkingen worden uitgevoerd op een kleinere dataset.
Voorbeeld
Als je een lijst met werknemers hebt en je wilt eerst diegenen filteren met meer dan 5 jaar ervaring en vervolgens de overgebleven werknemers naar een ander formaat transformeren, is het logisch om te beginnen met filteren.
List<Employee> result = employees.stream()
.filter(e -> e.getYearsOfExperience() > 5) // First, `filter`
.map(e -> e.getName()) // Then apply other operations
.toList();
Zoals te zien is in dit voorbeeld, plaats je de filter() vóór de map() methode omdat dit het mogelijk maakt om eerst het aantal elementen waarmee je moet werken te verminderen. Je filtert werknemers met meer dan 5 jaar ervaring en extraheert vervolgens hun namen.
Deze volgorde van operaties is efficiënt omdat het onnodige gegevensverwerking tijdens de transformatiefase voorkomt.
1. Wat doet de filter()-methode in Stream API?
2. Welk type argument accepteert de filter()-methode?
3. Wat gebeurt er als je een voorwaarde gebruikt in de filter()-methode die altijd false retourneert?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Awesome!
Completion rate improved to 2.33
Elementen Filteren met de filter()-Methode
Veeg om het menu te tonen
Bij het werken met gegevensverzamelingen in Java is het vaak nodig om specifieke elementen te selecteren die aan bepaalde voorwaarden voldoen. Traditioneel vereist dit lussen en voorwaardelijke instructies, waardoor de code uitgebreider wordt. De filter()-methode biedt hiervoor een oplossing.
Deze methode is al gebruikt in onze voorbeelden, maar we hebben nog niet in detail besproken wat deze als argument accepteert. Het accepteert een functionele interface Predicate<T>, die bepaalt of een element moet worden opgenomen in de resulterende stream.
Stream<T> filter(Predicate<? super T> predicate);
Hier is T het type van de elementen in de stream, en Predicate<? super T> is de filtervoorwaarde die wordt gebruikt om elk element te controleren.
Praktische Toepassing
Stel, je hebt een lijst met werknemers, elk met een name en yearsOfExperience in het bedrijf. Je wilt alleen degenen selecteren die langer dan 5 jaar bij het bedrijf werken om hen een bonus of extra voordelen aan te bieden.
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 dit voorbeeld wordt een stream van werknemers gemaakt met behulp van stream(). Vervolgens worden met de filter-methode de werknemers gefilterd die meer dan 5 jaar ervaring hebben.
Het resultaat is een nieuwe lijst die alleen die werknemers bevat die aan deze voorwaarde voldoen.
Wanneer filter gebruiken
In de meeste gevallen is het beter om filter() aan het begin te gebruiken om de hoeveelheid gegevens voor volgende bewerkingen te verminderen. Dit verbetert de prestaties omdat latere bewerkingen worden uitgevoerd op een kleinere dataset.
Voorbeeld
Als je een lijst met werknemers hebt en je wilt eerst diegenen filteren met meer dan 5 jaar ervaring en vervolgens de overgebleven werknemers naar een ander formaat transformeren, is het logisch om te beginnen met filteren.
List<Employee> result = employees.stream()
.filter(e -> e.getYearsOfExperience() > 5) // First, `filter`
.map(e -> e.getName()) // Then apply other operations
.toList();
Zoals te zien is in dit voorbeeld, plaats je de filter() vóór de map() methode omdat dit het mogelijk maakt om eerst het aantal elementen waarmee je moet werken te verminderen. Je filtert werknemers met meer dan 5 jaar ervaring en extraheert vervolgens hun namen.
Deze volgorde van operaties is efficiënt omdat het onnodige gegevensverwerking tijdens de transformatiefase voorkomt.
1. Wat doet de filter()-methode in Stream API?
2. Welk type argument accepteert de filter()-methode?
3. Wat gebeurt er als je een voorwaarde gebruikt in de filter()-methode die altijd false retourneert?
Bedankt voor je feedback!