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 | Section
Practice
Projects
Quizzes & Challenges
Quizer
Challenges
/
Stream-API i Java

bookFiltrering av Elementer med Filter()-Metoden

Sveip for å vise menyen

Ved arbeid med datakollekjoner i Java er det ofte behov for å hente ut spesifikke elementer som oppfyller bestemte betingelser. Tradisjonelt krever dette løkker og betingede uttrykk, noe som gjør koden mer omstendelig. Det er her filter()-metoden kommer til nytte.

Denne metoden har allerede vært brukt i våre eksempler, men vi har ikke gått nærmere inn på 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 opprettes en stream av ansatte ved å bruke stream(). Deretter brukes filter-metoden for å filtrere ansatte som har mer enn 5 års 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 gir bedre ytelse siden senere operasjoner vil utføres på et mindre datasett.

Eksempel

Hvis du har en liste over ansatte og ønsker å først filtrere de med mer enn 5 års 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 vist 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 1. Kapittel 17

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

Seksjon 1. Kapittel 17
some-alt