Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Filtraggio degli Elementi con il Metodo filter() | Operazioni Intermedie Nello Stream API
Stream API

bookFiltraggio degli Elementi con il Metodo filter()

Quando si lavora con collezioni di dati in Java, spesso è necessario estrarre specifici elementi che soddisfano determinate condizioni. Tradizionalmente, questo richiede cicli e istruzioni condizionali, rendendo il codice più prolisso. È qui che il metodo filter() viene in aiuto.

Hai già utilizzato questo metodo nei nostri esempi, ma non abbiamo ancora discusso in dettaglio cosa accetta come argomento. Accetta un'interfaccia funzionale Predicate<T>, che definisce se un elemento deve essere incluso nello stream risultante.

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

Qui, T rappresenta il tipo degli elementi nello stream, e Predicate<? super T> è la condizione di filtraggio, utilizzata per verificare ciascun elemento.

Applicazione pratica

Si consideri una lista di dipendenti, ciascuno con un name e yearsOfExperience nell'azienda. Si desidera selezionare solo coloro che lavorano in azienda da più di 5 anni per offrire loro un bonus o ulteriori benefit.

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

In questo esempio, viene creato uno stream di dipendenti utilizzando stream(). Successivamente, tramite il metodo filter, vengono filtrati i dipendenti che hanno più di 5 anni di esperienza.

Il risultato è una nuova lista contenente solo quei dipendenti che soddisfano questa condizione.

Quando usare filter

Nella maggior parte dei casi, è preferibile utilizzare filter() all'inizio per ridurre la quantità di dati per le successive operazioni. Questo migliora le prestazioni poiché le operazioni successive verranno eseguite su un dataset più piccolo.

Esempio

Se si dispone di una lista di dipendenti e si desidera prima filtrare quelli con più di 5 anni di esperienza e poi trasformare i restanti dipendenti in un formato diverso, ha senso iniziare con il filtraggio.

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

Come puoi vedere, in questo esempio, si posiziona il filter() prima del metodo map() perché consente di ridurre innanzitutto il numero di elementi su cui lavorare. Si filtrano i dipendenti con più di 5 anni di esperienza e poi si estraggono i loro nomi.

Questo ordine di operazioni è efficiente perché evita elaborazioni di dati non necessarie durante la fase di trasformazione.

1. Cosa fa il metodo filter() nello Stream API?

2. Che tipo di argomento accetta il metodo filter()?

3. Cosa succede se si utilizza una condizione nel metodo filter() che restituisce sempre false?

question mark

Cosa fa il metodo filter() nello Stream API?

Select the correct answer

question mark

Che tipo di argomento accetta il metodo filter()?

Select the correct answer

question mark

Cosa succede se si utilizza una condizione nel metodo filter() che restituisce sempre false?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookFiltraggio degli Elementi con il Metodo filter()

Scorri per mostrare il menu

Quando si lavora con collezioni di dati in Java, spesso è necessario estrarre specifici elementi che soddisfano determinate condizioni. Tradizionalmente, questo richiede cicli e istruzioni condizionali, rendendo il codice più prolisso. È qui che il metodo filter() viene in aiuto.

Hai già utilizzato questo metodo nei nostri esempi, ma non abbiamo ancora discusso in dettaglio cosa accetta come argomento. Accetta un'interfaccia funzionale Predicate<T>, che definisce se un elemento deve essere incluso nello stream risultante.

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

Qui, T rappresenta il tipo degli elementi nello stream, e Predicate<? super T> è la condizione di filtraggio, utilizzata per verificare ciascun elemento.

Applicazione pratica

Si consideri una lista di dipendenti, ciascuno con un name e yearsOfExperience nell'azienda. Si desidera selezionare solo coloro che lavorano in azienda da più di 5 anni per offrire loro un bonus o ulteriori benefit.

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

In questo esempio, viene creato uno stream di dipendenti utilizzando stream(). Successivamente, tramite il metodo filter, vengono filtrati i dipendenti che hanno più di 5 anni di esperienza.

Il risultato è una nuova lista contenente solo quei dipendenti che soddisfano questa condizione.

Quando usare filter

Nella maggior parte dei casi, è preferibile utilizzare filter() all'inizio per ridurre la quantità di dati per le successive operazioni. Questo migliora le prestazioni poiché le operazioni successive verranno eseguite su un dataset più piccolo.

Esempio

Se si dispone di una lista di dipendenti e si desidera prima filtrare quelli con più di 5 anni di esperienza e poi trasformare i restanti dipendenti in un formato diverso, ha senso iniziare con il filtraggio.

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

Come puoi vedere, in questo esempio, si posiziona il filter() prima del metodo map() perché consente di ridurre innanzitutto il numero di elementi su cui lavorare. Si filtrano i dipendenti con più di 5 anni di esperienza e poi si estraggono i loro nomi.

Questo ordine di operazioni è efficiente perché evita elaborazioni di dati non necessarie durante la fase di trasformazione.

1. Cosa fa il metodo filter() nello Stream API?

2. Che tipo di argomento accetta il metodo filter()?

3. Cosa succede se si utilizza una condizione nel metodo filter() che restituisce sempre false?

question mark

Cosa fa il metodo filter() nello Stream API?

Select the correct answer

question mark

Che tipo di argomento accetta il metodo filter()?

Select the correct answer

question mark

Cosa succede se si utilizza una condizione nel metodo filter() che restituisce sempre false?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2
some-alt