Dominando Interfaces Funcionais no Java 8: Guia Completo
Interfaces funcionais têm uma única funcionalidade a exibir. Por exemplo, interface Comparable com método único compareTo é usada para comparação. O Java 8 definiu muitas interfaces funcionais para uso extensivo em expressões lambda. Lista das interfaces em java.util.function:
| Nº | Interface e Descrição |
|---|---|
| 1 | BiConsumer<T,U> - Operação que aceita dois argumentos, sem resultado. |
| 2 | BiFunction<T,U,R> - Função que aceita dois argumentos e produz resultado. |
| 3 | BinaryOperator<T> - Operação sobre dois operandos do mesmo tipo, resultado do mesmo tipo. |
| 4 | BiPredicate<T,U> - Predicado (função booleana) de dois argumentos. |
| 5 | BooleanSupplier - Fornecedor de resultados booleanos. |
| 6 | Consumer<T> - Operação que aceita um argumento, sem resultado. |
| 7 | DoubleBinaryOperator - Operação sobre dois operandos double, resultado double. |
| 8 | DoubleConsumer - Operação que aceita argumento double, sem resultado. |
| 9 | DoubleFunction<R> - Função que aceita double, produz resultado. |
| 10 | DoublePredicate - Predicado de um argumento double. |
| 11 | DoubleSupplier - Fornecedor de resultados double. |
| 12 | DoubleToIntFunction - Função double -> int. |
| 13 | DoubleToLongFunction - Função double -> long. |
| 14 | DoubleUnaryOperator - Operação em um operando double, resultado double. |
| 15 | Function<T,R> - Função que aceita um argumento, produz resultado. |
| 16 | IntBinaryOperator - Operação sobre dois int, resultado int. |
| 17 | IntConsumer - Operação que aceita int, sem resultado. |
| 18 | IntFunction<R> - Função que aceita int, produz resultado. |
| 19 | IntPredicate - Predicado de um argumento int. |
| 20 | IntSupplier - Fornecedor de resultados int. |
| 21 | IntToDoubleFunction - Função int -> double. |
| 22 | IntToLongFunction - Função int -> long. |
| 23 | IntUnaryOperator - Operação em um operando int, resultado int. |
| 24 | LongBinaryOperator - Operação sobre dois long, resultado long. |
| 25 | LongConsumer - Operação que aceita long, sem resultado. |
| 26 | LongFunction<R> - Função que aceita long, produz resultado. |
| 27 | LongPredicate - Predicado de um argumento long. |
| 28 | LongSupplier - Fornecedor de resultados long. |
| 29 | LongToDoubleFunction - Função long -> double. |
| 30 | LongToIntFunction - Função long -> int. |
| 31 | LongUnaryOperator - Operação em um operando long, resultado long. |
| 32 | ObjDoubleConsumer<T> - Operação que aceita objeto e double, sem resultado. |
| 33 | ObjIntConsumer<T> - Operação que aceita objeto e int, sem resultado. |
| 34 | ObjLongConsumer<T> - Operação que aceita objeto e long, sem resultado. |
| 35 | Predicate<T> - Predicado (função booleana) de um argumento. |
| 36 | Supplier<T> - Fornecedor de resultados. |
| 37 | ToDoubleBiFunction<T,U> - Função que aceita dois argumentos, produz double. |
| 38 | ToDoubleFunction<T> - Função que produz double. |
| 39 | ToIntBiFunction<T,U> - Função que aceita dois argumentos, produz int. |
| 40 | ToIntFunction<T> - Função que produz int. |
| 41 | ToLongBiFunction<T,U> - Função que aceita dois argumentos, produz long. |
| 42 | ToLongFunction<T> - Função que produz long. |
| 43 | UnaryOperator<T> - Operação em um operando, resultado do mesmo tipo. |
Exemplo de Interface Funcional
Predicate<T> é interface funcional com método test(Object) retornando boolean. Significa que um objeto é testado para true/false.
Java8Tester.java
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String args[]) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
System.out.println("Print all numbers:");
eval(list, n -> true);
System.out.println("Print even numbers:");
eval(list, n -> n % 2 == 0);
System.out.println("Print numbers greater than 3:");
eval(list, n -> n > 3);
}
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
for (Integer n : list) {
if (predicate.test(n)) {
System.out.println(n + " ");
}
}
}
}
Resultado
Print all numbers:
1 2 3 4 5 6 7 8 9
Print even numbers:
2 4 6 8
Print numbers greater than 3:
4 5 6 7 8 9
Passamos interface Predicate, que recebe entrada única e retorna boolean, para filtrar a lista de formas diferentes.
Java
- Dominando Operadores Java: Tipos, Sintaxe e Exemplos Práticos
- Comentários em Java: Tipos, Uso e Boas Práticas
- Dominando o Loop for Aprimorado em Java: Sintaxe, Exemplos e Boas Práticas
- Dominando Strings em Java: Criação, Métodos e Boas Práticas
- Dominando Interfaces em Java: Conceitos, Implementação e Boas Práticas
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Dominando Try-With-Resources em Java: Gerenciamento Automático de Recursos Explicado
- Anotações em Java Explicadas: Tipos, Posicionamento e Exemplos Práticos
- Asserções em Java: Guia Prático para Detectar Bugs e Garantir Confiabilidade do Código
- Entendendo o Java Vector: Uso, Recursos e Comparação com ArrayList