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 het gebruik van lussen en voorwaardelijke instructies, waardoor de code omslachtiger 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. De methode neemt een functionele interface Predicate<T> aan, 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 van werknemers, elk met een name en yearsOfExperience in het bedrijf. Je wilt alleen degenen selecteren die langer dan 5 jaar bij het bedrijf zijn 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 aangemaakt met 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 er een lijst met werknemers is en eerst diegenen met meer dan 5 jaar ervaring moeten worden gefilterd en vervolgens de overgebleven werknemers naar een ander formaat moeten worden getransformeerd, 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 werkt te verminderen. Je filtert werknemers met meer dan 5 jaar ervaring en haalt vervolgens hun namen op.
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 methode filter()?
3. Wat gebeurt er als je een voorwaarde gebruikt in de methode filter() 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.