Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Predicato: Filtraggio dei Dati | Fondamenti e Capacità Funzionali dello Stream API
Stream API

bookPredicato: Filtraggio dei Dati

Lo scopo principale di Predicate è facilitare il filtro dei dati in base a una determinata condizione. Questa interfaccia funzionale contiene un unico metodo astratto:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Inoltre, fornisce metodi di default per combinare condizioni, come and(), or() e negate(), che verranno trattati successivamente.

Applicazione pratica

La sintassi di tutte le interfacce funzionali segue un modello simile ed è piuttosto semplice:

Predicate<T> predicate = t -> condition;

Qui, T rappresenta il tipo dell'argomento di input, e condition è un'espressione che restituisce true oppure false.

Supponiamo di dover verificare se un determinato numero è pari. È possibile utilizzare un Predicate come segue:

Main.java

Main.java

copy
1234567891011121314151617
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: Check if a number is even Predicate<Integer> isEven = number -> number % 2 == 0; int number = 4; if (isEven.test(number)) { System.out.println(number + " is an even number."); } else { System.out.println(number + " is an odd number."); } } }

Questo codice utilizza il metodo test() dell'interfaccia Predicate, progettata per la valutazione delle condizioni. Quando viene chiamato test(), esegue la logica definita nell'espressione lambda number -> number % 2 == 0, verificando se il numero è divisibile per 2 senza resto, determinandone così la parità.

Qui, Predicate viene utilizzato per verificare se un determinato numero è pari, e il metodo test() applica la condizione.

Combinazione di condizioni

Predicate offre la possibilità di combinare condizioni utilizzando i metodi and(), or() e negate(). Questo consente verifiche più complesse. Di seguito alcuni esempi:

Condizione AND

Supponiamo di dover verificare se un numero soddisfa due criteri: deve essere maggiore di 10 e pari.

È possibile utilizzare il metodo and() per questo scopo, proprio come l'operatore && in Java, per garantire che entrambe le condizioni restituiscano true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is greater than 10 Predicate<Integer> isGreaterThanTen = number -> number > 10; // Condition 2: The number is even Predicate<Integer> isEven = number -> number % 2 == 0; // Combined condition: The number is greater than 10 and even Predicate<Integer> combinedCondition = isGreaterThanTen.and(isEven); int number = 12; if (combinedCondition.test(number)) { System.out.println(number + " meets both conditions."); } else { System.out.println(number + " does not meet the conditions."); } } }

Il metodo and() combina due condizioni. Un numero deve soddisfare entrambi i criteri affinché il risultato sia true.

Condizione OR

Supponiamo ora di dover verificare se un numero è minore di 5 oppure maggiore di 15.

È possibile utilizzare il metodo or(), proprio come l'operatore || in Java, per assicurarsi che almeno una delle condizioni restituisca true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is less than 5 Predicate<Integer> isLessThanFive = number -> number < 5; // Condition 2: The number is greater than 15 Predicate<Integer> isGreaterThanFifteen = number -> number > 15; // Combined condition: The number is less than 5 or greater than 15 Predicate<Integer> combinedCondition = isLessThanFive.or(isGreaterThanFifteen); int number = 3; if (combinedCondition.test(number)) { System.out.println(number + " meets at least one of the conditions."); } else { System.out.println(number + " does not meet any of the conditions."); } } }

Il metodo or() verifica se un numero soddisfa almeno una delle condizioni specificate. Questo è utile quando è sufficiente soddisfare anche un solo criterio.

Negazione della Condizione

Supponiamo sia necessario verificare se una stringa non è vuota.

È possibile utilizzare il metodo negate(), proprio come l'operatore ! in Java, per invertire il risultato di una condizione.

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: The string is empty Predicate<String> isEmpty = str -> str == null || str.isEmpty(); // Condition: The string is not empty Predicate<String> isNotEmpty = isEmpty.negate(); String text = "Hello"; if (isNotEmpty.test(text)) { System.out.println("The string contains text: " + text); } else { System.out.println("The string is empty."); } } }

Il metodo negate() inverte una condizione. Se la condizione originale restituisce true, la versione negata restituirà false, e viceversa.

1. Qual è lo scopo principale dell'interfaccia funzionale Predicate in Java?

2. Quale sarà l'output del seguente codice?

question mark

Qual è lo scopo principale dell'interfaccia funzionale Predicate in Java?

Select the correct answer

question mark

Quale sarà l'output del seguente codice?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 4

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 show an example of using Predicate with numbers?

How do I combine multiple Predicate conditions?

What does the test() method do in practice?

Awesome!

Completion rate improved to 2.33

bookPredicato: Filtraggio dei Dati

Scorri per mostrare il menu

Lo scopo principale di Predicate è facilitare il filtro dei dati in base a una determinata condizione. Questa interfaccia funzionale contiene un unico metodo astratto:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Inoltre, fornisce metodi di default per combinare condizioni, come and(), or() e negate(), che verranno trattati successivamente.

Applicazione pratica

La sintassi di tutte le interfacce funzionali segue un modello simile ed è piuttosto semplice:

Predicate<T> predicate = t -> condition;

Qui, T rappresenta il tipo dell'argomento di input, e condition è un'espressione che restituisce true oppure false.

Supponiamo di dover verificare se un determinato numero è pari. È possibile utilizzare un Predicate come segue:

Main.java

Main.java

copy
1234567891011121314151617
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: Check if a number is even Predicate<Integer> isEven = number -> number % 2 == 0; int number = 4; if (isEven.test(number)) { System.out.println(number + " is an even number."); } else { System.out.println(number + " is an odd number."); } } }

Questo codice utilizza il metodo test() dell'interfaccia Predicate, progettata per la valutazione delle condizioni. Quando viene chiamato test(), esegue la logica definita nell'espressione lambda number -> number % 2 == 0, verificando se il numero è divisibile per 2 senza resto, determinandone così la parità.

Qui, Predicate viene utilizzato per verificare se un determinato numero è pari, e il metodo test() applica la condizione.

Combinazione di condizioni

Predicate offre la possibilità di combinare condizioni utilizzando i metodi and(), or() e negate(). Questo consente verifiche più complesse. Di seguito alcuni esempi:

Condizione AND

Supponiamo di dover verificare se un numero soddisfa due criteri: deve essere maggiore di 10 e pari.

È possibile utilizzare il metodo and() per questo scopo, proprio come l'operatore && in Java, per garantire che entrambe le condizioni restituiscano true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is greater than 10 Predicate<Integer> isGreaterThanTen = number -> number > 10; // Condition 2: The number is even Predicate<Integer> isEven = number -> number % 2 == 0; // Combined condition: The number is greater than 10 and even Predicate<Integer> combinedCondition = isGreaterThanTen.and(isEven); int number = 12; if (combinedCondition.test(number)) { System.out.println(number + " meets both conditions."); } else { System.out.println(number + " does not meet the conditions."); } } }

Il metodo and() combina due condizioni. Un numero deve soddisfare entrambi i criteri affinché il risultato sia true.

Condizione OR

Supponiamo ora di dover verificare se un numero è minore di 5 oppure maggiore di 15.

È possibile utilizzare il metodo or(), proprio come l'operatore || in Java, per assicurarsi che almeno una delle condizioni restituisca true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is less than 5 Predicate<Integer> isLessThanFive = number -> number < 5; // Condition 2: The number is greater than 15 Predicate<Integer> isGreaterThanFifteen = number -> number > 15; // Combined condition: The number is less than 5 or greater than 15 Predicate<Integer> combinedCondition = isLessThanFive.or(isGreaterThanFifteen); int number = 3; if (combinedCondition.test(number)) { System.out.println(number + " meets at least one of the conditions."); } else { System.out.println(number + " does not meet any of the conditions."); } } }

Il metodo or() verifica se un numero soddisfa almeno una delle condizioni specificate. Questo è utile quando è sufficiente soddisfare anche un solo criterio.

Negazione della Condizione

Supponiamo sia necessario verificare se una stringa non è vuota.

È possibile utilizzare il metodo negate(), proprio come l'operatore ! in Java, per invertire il risultato di una condizione.

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: The string is empty Predicate<String> isEmpty = str -> str == null || str.isEmpty(); // Condition: The string is not empty Predicate<String> isNotEmpty = isEmpty.negate(); String text = "Hello"; if (isNotEmpty.test(text)) { System.out.println("The string contains text: " + text); } else { System.out.println("The string is empty."); } } }

Il metodo negate() inverte una condizione. Se la condizione originale restituisce true, la versione negata restituirà false, e viceversa.

1. Qual è lo scopo principale dell'interfaccia funzionale Predicate in Java?

2. Quale sarà l'output del seguente codice?

question mark

Qual è lo scopo principale dell'interfaccia funzionale Predicate in Java?

Select the correct answer

question mark

Quale sarà l'output del seguente codice?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 4
some-alt