Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Alkioiden Suodattaminen Filter()-Metodilla | Välimuotoiset Operaatiot Stream API:ssa
Stream API

bookAlkioiden Suodattaminen Filter()-Metodilla

Työskennellessäsi datan kokoelmien kanssa Javassa, on usein tarpeen poimia tietyt alkiot, jotka täyttävät tietyt ehdot. Perinteisesti tämä vaatii silmukoita ja ehtolauseita, mikä tekee koodista monisanaisempaa. Tässä kohtaa filter()-metodi tulee avuksi.

Olet jo käyttänyt tätä metodia esimerkeissämme, mutta emme ole vielä tarkemmin käsitelleet, mitä se ottaa argumenttina. Se hyväksyy funktionaalisen rajapinnan Predicate<T>, joka määrittää, tuleeko alkio sisällyttää tuloksena saatavaan streamiin.

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

T tässä tarkoittaa virran alkioiden tyyppiä, ja Predicate<? super T> on suodatusehto, jota käytetään tarkistamaan jokainen alkio.

Käytännön sovellus

Oletetaan, että sinulla on lista työntekijöistä, joilla jokaisella on name ja yearsOfExperience yrityksessä. Haluat valita vain ne, jotka ovat olleet yrityksessä yli 5 vuotta, tarjotaksesi heille bonuksen tai lisäetuja.

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); } }

Tässä esimerkissä luodaan virta (stream) työntekijöistä käyttämällä stream(). Tämän jälkeen käytetään filter-metodia, jolla suodatetaan työntekijät, joilla on yli 5 vuotta kokemusta.

Tuloksena on uusi lista, joka sisältää vain ne työntekijät, jotka täyttävät tämän ehdon.

Milloin käyttää filteriä

Useimmissa tapauksissa on parempi käyttää filter()-metodia alussa vähentämään myöhempiin operaatioihin menevän datan määrää. Tämä parantaa suorituskykyä, koska myöhemmät operaatiot suoritetaan pienemmälle aineistolle.

Esimerkki

Jos sinulla on lista työntekijöistä ja haluat ensin suodattaa ne, joilla on yli 5 vuotta kokemusta, ja sitten muuntaa jäljelle jäävät työntekijät eri muotoon, on järkevää aloittaa suodatuksella.

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

Kuten huomaat, tässä esimerkissä asetat filter()-metodin ennen map()-metodia, koska se mahdollistaa ensin käsiteltävien alkioiden määrän vähentämisen. Suodatat työntekijät, joilla on yli 5 vuotta kokemusta, ja tämän jälkeen poimit heidän nimensä.

Tämä operaatioiden järjestys on tehokas, koska se estää tarpeettoman datan käsittelyn muunnosvaiheessa.

1. Mitä filter()-metodi tekee Stream API:ssa?

2. Minkä tyyppisen argumentin filter()-metodi hyväksyy?

3. Mitä tapahtuu, jos käytät filter()-metodissa ehtoa, joka palauttaa aina false?

question mark

Mitä filter()-metodi tekee Stream API:ssa?

Select the correct answer

question mark

Minkä tyyppisen argumentin filter()-metodi hyväksyy?

Select the correct answer

question mark

Mitä tapahtuu, jos käytät filter()-metodissa ehtoa, joka palauttaa aina false?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

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

bookAlkioiden Suodattaminen Filter()-Metodilla

Pyyhkäise näyttääksesi valikon

Työskennellessäsi datan kokoelmien kanssa Javassa, on usein tarpeen poimia tietyt alkiot, jotka täyttävät tietyt ehdot. Perinteisesti tämä vaatii silmukoita ja ehtolauseita, mikä tekee koodista monisanaisempaa. Tässä kohtaa filter()-metodi tulee avuksi.

Olet jo käyttänyt tätä metodia esimerkeissämme, mutta emme ole vielä tarkemmin käsitelleet, mitä se ottaa argumenttina. Se hyväksyy funktionaalisen rajapinnan Predicate<T>, joka määrittää, tuleeko alkio sisällyttää tuloksena saatavaan streamiin.

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

T tässä tarkoittaa virran alkioiden tyyppiä, ja Predicate<? super T> on suodatusehto, jota käytetään tarkistamaan jokainen alkio.

Käytännön sovellus

Oletetaan, että sinulla on lista työntekijöistä, joilla jokaisella on name ja yearsOfExperience yrityksessä. Haluat valita vain ne, jotka ovat olleet yrityksessä yli 5 vuotta, tarjotaksesi heille bonuksen tai lisäetuja.

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); } }

Tässä esimerkissä luodaan virta (stream) työntekijöistä käyttämällä stream(). Tämän jälkeen käytetään filter-metodia, jolla suodatetaan työntekijät, joilla on yli 5 vuotta kokemusta.

Tuloksena on uusi lista, joka sisältää vain ne työntekijät, jotka täyttävät tämän ehdon.

Milloin käyttää filteriä

Useimmissa tapauksissa on parempi käyttää filter()-metodia alussa vähentämään myöhempiin operaatioihin menevän datan määrää. Tämä parantaa suorituskykyä, koska myöhemmät operaatiot suoritetaan pienemmälle aineistolle.

Esimerkki

Jos sinulla on lista työntekijöistä ja haluat ensin suodattaa ne, joilla on yli 5 vuotta kokemusta, ja sitten muuntaa jäljelle jäävät työntekijät eri muotoon, on järkevää aloittaa suodatuksella.

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

Kuten huomaat, tässä esimerkissä asetat filter()-metodin ennen map()-metodia, koska se mahdollistaa ensin käsiteltävien alkioiden määrän vähentämisen. Suodatat työntekijät, joilla on yli 5 vuotta kokemusta, ja tämän jälkeen poimit heidän nimensä.

Tämä operaatioiden järjestys on tehokas, koska se estää tarpeettoman datan käsittelyn muunnosvaiheessa.

1. Mitä filter()-metodi tekee Stream API:ssa?

2. Minkä tyyppisen argumentin filter()-metodi hyväksyy?

3. Mitä tapahtuu, jos käytät filter()-metodissa ehtoa, joka palauttaa aina false?

question mark

Mitä filter()-metodi tekee Stream API:ssa?

Select the correct answer

question mark

Minkä tyyppisen argumentin filter()-metodi hyväksyy?

Select the correct answer

question mark

Mitä tapahtuu, jos käytät filter()-metodissa ehtoa, joka palauttaa aina false?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 2
some-alt