Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Filtrering af Elementer med filter()-Metoden | Section
Practice
Projects
Quizzes & Challenges
Quizzer
Challenges
/
Stream API i Java

bookFiltrering af Elementer med filter()-Metoden

Stryg for at vise menuen

Ved arbejde med datakollektioner i Java er det ofte nødvendigt at udtrække specifikke elementer, der opfylder bestemte betingelser. Traditionelt kræver dette løkker og betingede udsagn, hvilket gør koden mere omstændelig. Her kommer filter()-metoden til undsætning.

Du har allerede brugt denne metode i vores eksempler, men vi har endnu ikke gennemgået i detaljer, hvad den tager som argument. Den accepterer et funktionelt interface Predicate<T>, som definerer, om et element skal inkluderes i den resulterende stream.

Stream<T> filter(Predicate<? super T> predicate);

Her er T typen af elementer i strømmen, og Predicate<? super T> er filtreringsbetingelsen, der bruges til at kontrollere hvert element.

Praktisk anvendelse

Antag, at du har en liste over medarbejdere, hver med et name og yearsOfExperience i virksomheden. Du ønsker kun at vælge dem, der har været i virksomheden i mere end 5 år for at tilbyde dem en bonus eller ekstra fordele.

Main.java

Main.java

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
package 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); } }

I dette eksempel oprettes en stream af medarbejdere ved hjælp af stream(). Derefter anvendes filter-metoden til at filtrere medarbejdere med mere end 5 års erfaring.

Resultatet er en ny liste, der kun indeholder de medarbejdere, som opfylder denne betingelse.

Hvornår filter skal bruges

I de fleste tilfælde er det bedst at anvende filter() i begyndelsen for at reducere mængden af data til efterfølgende operationer. Dette forbedrer ydelsen, da senere operationer udføres på et mindre datasæt.

Eksempel

Hvis du har en liste af medarbejdere og først vil filtrere dem med mere end 5 års erfaring og derefter transformere de resterende medarbejdere til et andet format, giver det mening at starte med filtrering.

List<Employee> result = employees.stream()
        .filter(e -> e.getYearsOfExperience() > 5)  // First, `filter`
        .map(e -> e.getName())  // Then apply other operations
        .toList();

Som det ses i dette eksempel, placeres filter() før map() metoden, da det gør det muligt først at reducere antallet af elementer, der skal behandles. Her filtreres medarbejdere med mere end 5 års erfaring, hvorefter deres navne udtrækkes.

Denne rækkefølge af operationer er effektiv, da den forhindrer unødvendig databehandling under transformationsfasen.

1. Hvad gør filter()-metoden i Stream API?

2. Hvilken type argument accepterer filter()-metoden?

3. Hvad sker der, hvis du bruger en betingelse i filter()-metoden, der altid returnerer false?

question mark

Hvad gør filter()-metoden i Stream API?

Select the correct answer

question mark

Hvilken type argument accepterer filter()-metoden?

Select the correct answer

question mark

Hvad sker der, hvis du bruger en betingelse i filter()-metoden, der altid returnerer false?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 17

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 1. Kapitel 17
some-alt