Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Predicado: Filtragem de Dados | Fundamentos e Capacidades Funcionais da Stream API
Stream API

bookPredicado: Filtragem de Dados

O principal objetivo de Predicate é facilitar a filtragem de dados de forma conveniente com base em uma condição fornecida. Esta interface funcional contém um único método abstrato:

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

Além disso, fornece métodos padrão para combinar condições, como and(), or() e negate(), que serão abordados posteriormente.

Aplicação Prática

A sintaxe para todas as interfaces funcionais segue um padrão semelhante e é bastante simples:

Predicate<T> predicate = t -> condition;

Aqui, T representa o tipo do argumento de entrada, e condition é uma expressão que retorna true ou false.

Suponha que seja necessário verificar se um determinado número é par. É possível utilizar um Predicate para isso da seguinte forma:

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

Este código utiliza o método test() da interface Predicate, que é projetada para avaliar condições. Quando test() é chamado, ele executa a lógica definida na expressão lambda number -> number % 2 == 0, verificando se o número é divisível por 2 sem resto, o que determina se é par.

Aqui, Predicate é utilizado para verificar se um determinado número é par, e o método test() aplica a condição.

Combinando Condições

Predicate oferece a capacidade de combinar condições utilizando os métodos and(), or() e negate(). Isso possibilita verificações mais complexas. Veja alguns exemplos:

Condição AND

Suponha que seja necessário verificar se um número atende a dois critérios: deve ser maior que 10 e par.

É possível utilizar o método and() para isso, assim como o operador && em Java, garantindo que ambas as condições retornem 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."); } } }

O método and() combina duas condições. Um número deve satisfazer ambos os critérios para que o resultado seja true.

Condição OR

Agora, considere a necessidade de verificar se um número é menor que 5 ou maior que 15.

É possível utilizar o método or(), assim como o operador || em Java, para garantir que pelo menos uma das condições retorne 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."); } } }

O método or() verifica se um número atende a pelo menos uma das condições fornecidas. Este recurso é útil quando satisfazer apenas um critério é suficiente.

NEGATE Condição

Suponha que seja necessário verificar se uma string não está vazia.

É possível utilizar o método negate(), assim como o operador ! em Java, para inverter o resultado de uma condição.

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

O método negate() inverte uma condição. Se a condição original retornar true, a versão negada retornará false, e vice-versa.

1. Qual é o principal objetivo da interface funcional Predicate em Java?

2. Qual será a saída do seguinte código?

question mark

Qual é o principal objetivo da interface funcional Predicate em Java?

Select the correct answer

question mark

Qual será a saída do seguinte código?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

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

bookPredicado: Filtragem de Dados

Deslize para mostrar o menu

O principal objetivo de Predicate é facilitar a filtragem de dados de forma conveniente com base em uma condição fornecida. Esta interface funcional contém um único método abstrato:

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

Além disso, fornece métodos padrão para combinar condições, como and(), or() e negate(), que serão abordados posteriormente.

Aplicação Prática

A sintaxe para todas as interfaces funcionais segue um padrão semelhante e é bastante simples:

Predicate<T> predicate = t -> condition;

Aqui, T representa o tipo do argumento de entrada, e condition é uma expressão que retorna true ou false.

Suponha que seja necessário verificar se um determinado número é par. É possível utilizar um Predicate para isso da seguinte forma:

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

Este código utiliza o método test() da interface Predicate, que é projetada para avaliar condições. Quando test() é chamado, ele executa a lógica definida na expressão lambda number -> number % 2 == 0, verificando se o número é divisível por 2 sem resto, o que determina se é par.

Aqui, Predicate é utilizado para verificar se um determinado número é par, e o método test() aplica a condição.

Combinando Condições

Predicate oferece a capacidade de combinar condições utilizando os métodos and(), or() e negate(). Isso possibilita verificações mais complexas. Veja alguns exemplos:

Condição AND

Suponha que seja necessário verificar se um número atende a dois critérios: deve ser maior que 10 e par.

É possível utilizar o método and() para isso, assim como o operador && em Java, garantindo que ambas as condições retornem 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."); } } }

O método and() combina duas condições. Um número deve satisfazer ambos os critérios para que o resultado seja true.

Condição OR

Agora, considere a necessidade de verificar se um número é menor que 5 ou maior que 15.

É possível utilizar o método or(), assim como o operador || em Java, para garantir que pelo menos uma das condições retorne 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."); } } }

O método or() verifica se um número atende a pelo menos uma das condições fornecidas. Este recurso é útil quando satisfazer apenas um critério é suficiente.

NEGATE Condição

Suponha que seja necessário verificar se uma string não está vazia.

É possível utilizar o método negate(), assim como o operador ! em Java, para inverter o resultado de uma condição.

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

O método negate() inverte uma condição. Se a condição original retornar true, a versão negada retornará false, e vice-versa.

1. Qual é o principal objetivo da interface funcional Predicate em Java?

2. Qual será a saída do seguinte código?

question mark

Qual é o principal objetivo da interface funcional Predicate em Java?

Select the correct answer

question mark

Qual será a saída do seguinte código?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 4
some-alt