Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Filtrering av Elementer med Filter()-Metoden | Intermediære Operasjoner i Stream API
Stream-API

bookFiltrering av Elementer med Filter()-Metoden

Når du arbeider med datakollekjoner i Java, trenger du ofte å hente ut spesifikke elementer som oppfyller visse betingelser. Tradisjonelt krever dette løkker og betingede uttrykk, noe som gjør koden mer omstendelig. Det er her filter()-metoden kommer til unnsetning.

Du har allerede brukt denne metoden i våre eksempler, men vi har ikke diskutert i detalj hva den tar som argument. Den aksepterer et funksjonelt grensesnitt Predicate<T>, som definerer om et element skal inkluderes i den resulterende strømmen.

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

Her er T typen til elementene i strømmen, og Predicate<? super T> er filtreringsbetingelsen som brukes for å sjekke hvert element.

Praktisk anvendelse

Anta at du har en liste over ansatte, hver med et name og yearsOfExperience i selskapet. Du ønsker å velge kun de som har vært i selskapet i mer enn 5 år for å tilby dem en bonus eller ekstra fordeler.

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 eksempelet oppretter du en stream av ansatte ved å bruke stream(). Deretter bruker du filter-metoden for å filtrere ansatte som har mer enn 5 år med erfaring.

Resultatet er en ny liste som kun inneholder de ansatte som oppfyller denne betingelsen.

Når bruke filter

I de fleste tilfeller er det bedre å bruke filter() i begynnelsen for å redusere mengden data for påfølgende operasjoner. Dette forbedrer ytelsen siden senere operasjoner vil bli utført på et mindre datasett.

Eksempel

Hvis du har en liste over ansatte og ønsker å først filtrere de med mer enn 5 år med erfaring og deretter transformere de gjenværende ansatte til et annet format, er det fornuftig å 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 du ser i dette eksempelet, plasseres filter() før map()-metoden fordi det lar deg redusere antall elementer du må arbeide med først. Du filtrerer ansatte med mer enn 5 års erfaring, og deretter henter du deres navn.

Denne rekkefølgen av operasjoner er effektiv fordi den forhindrer unødvendig databehandling under transformasjonsfasen.

1. Hva gjør filter()-metoden i Stream API?

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

3. Hva skjer hvis du bruker en betingelse i filter()-metoden som alltid returnerer false?

question mark

Hva gjør filter()-metoden i Stream API?

Select the correct answer

question mark

Hvilken type argument aksepterer filter()-metoden?

Select the correct answer

question mark

Hva skjer hvis du bruker en betingelse i filter()-metoden som alltid returnerer false?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

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 av Elementer med Filter()-Metoden

Sveip for å vise menyen

Når du arbeider med datakollekjoner i Java, trenger du ofte å hente ut spesifikke elementer som oppfyller visse betingelser. Tradisjonelt krever dette løkker og betingede uttrykk, noe som gjør koden mer omstendelig. Det er her filter()-metoden kommer til unnsetning.

Du har allerede brukt denne metoden i våre eksempler, men vi har ikke diskutert i detalj hva den tar som argument. Den aksepterer et funksjonelt grensesnitt Predicate<T>, som definerer om et element skal inkluderes i den resulterende strømmen.

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

Her er T typen til elementene i strømmen, og Predicate<? super T> er filtreringsbetingelsen som brukes for å sjekke hvert element.

Praktisk anvendelse

Anta at du har en liste over ansatte, hver med et name og yearsOfExperience i selskapet. Du ønsker å velge kun de som har vært i selskapet i mer enn 5 år for å tilby dem en bonus eller ekstra fordeler.

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 eksempelet oppretter du en stream av ansatte ved å bruke stream(). Deretter bruker du filter-metoden for å filtrere ansatte som har mer enn 5 år med erfaring.

Resultatet er en ny liste som kun inneholder de ansatte som oppfyller denne betingelsen.

Når bruke filter

I de fleste tilfeller er det bedre å bruke filter() i begynnelsen for å redusere mengden data for påfølgende operasjoner. Dette forbedrer ytelsen siden senere operasjoner vil bli utført på et mindre datasett.

Eksempel

Hvis du har en liste over ansatte og ønsker å først filtrere de med mer enn 5 år med erfaring og deretter transformere de gjenværende ansatte til et annet format, er det fornuftig å 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 du ser i dette eksempelet, plasseres filter() før map()-metoden fordi det lar deg redusere antall elementer du må arbeide med først. Du filtrerer ansatte med mer enn 5 års erfaring, og deretter henter du deres navn.

Denne rekkefølgen av operasjoner er effektiv fordi den forhindrer unødvendig databehandling under transformasjonsfasen.

1. Hva gjør filter()-metoden i Stream API?

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

3. Hva skjer hvis du bruker en betingelse i filter()-metoden som alltid returnerer false?

question mark

Hva gjør filter()-metoden i Stream API?

Select the correct answer

question mark

Hvilken type argument aksepterer filter()-metoden?

Select the correct answer

question mark

Hva skjer hvis du bruker en betingelse i filter()-metoden som alltid returnerer false?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2
some-alt