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 | Mellemliggende Operationer i Stream API
Stream API

bookFiltrering af Elementer med filter()-Metoden

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

Denne metode er allerede blevet anvendt i vores eksempler, men vi har endnu ikke gennemgået detaljeret, 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 yderligere 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 skal filter anvendes

I de fleste tilfælde er det bedst at bruge 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 over medarbejdere og først vil filtrere dem med mere end 5 års erfaring og derefter omdanne 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. Du filtrerer medarbejdere med mere end 5 års erfaring, og derefter udtrækkes deres navne.

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 2. Kapitel 2

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

Suggested prompts:

Can you explain what a Predicate is in Java?

Can you show a full example with the Employee class?

Why is the order of filter and map important?

Awesome!

Completion rate improved to 2.33

bookFiltrering af Elementer med filter()-Metoden

Stryg for at vise menuen

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

Denne metode er allerede blevet anvendt i vores eksempler, men vi har endnu ikke gennemgået detaljeret, 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 yderligere 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 skal filter anvendes

I de fleste tilfælde er det bedst at bruge 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 over medarbejdere og først vil filtrere dem med mere end 5 års erfaring og derefter omdanne 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. Du filtrerer medarbejdere med mere end 5 års erfaring, og derefter udtrækkes deres navne.

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 2. Kapitel 2
some-alt