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() | Section
Practice
Projects
Quizzes & Challenges
Quiz
Challenges
/
Stream API in Java

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, ciò 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 una interfaccia funzionale Predicate<T>, che definisce se un elemento deve essere incluso nello stream risultante.

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

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

Applicazione pratica

Si supponga di avere 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 un 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 utilizzare 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 il numero di elementi con cui lavorare inizialmente. Si filtrano i dipendenti con più di 5 anni di esperienza e poi si estraggono i loro nomi.

Questo ordine delle 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 1. Capitolo 17

Chieda ad AI

expand

Chieda ad AI

ChatGPT

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

Sezione 1. Capitolo 17
some-alt