Java 8 - Interfaces funcionales
Las interfaces funcionales tienen una sola funcionalidad para exhibir. Por ejemplo, una interfaz Comparable con un solo método 'compareTo' se utiliza para fines de comparación. Java 8 ha definido una gran cantidad de interfaces funcionales para su uso extensivo en expresiones lambda. A continuación se muestra la lista de interfaces funcionales definidas en el paquete java.util.Function.
No Señor. | Interfaz y descripción |
---|---|
1 | BiConsumer<T,U> Representa una operación que acepta dos argumentos de entrada y no devuelve ningún resultado. |
2 | BiFunction<T,U,R> Representa una función que acepta dos argumentos y produce un resultado. |
3 | BinaryOperator<T> Representa una operación sobre dos operandos del mismo tipo, produciendo un resultado del mismo tipo que los operandos. |
4 | BiPredicate<T,U> Representa un predicado (función con valor booleano) de dos argumentos. |
5 | BooleanSupplier Representa un proveedor de resultados con valores booleanos. |
6 | Consumer<T> Representa una operación que acepta un único argumento de entrada y no devuelve ningún resultado. |
7 | DoubleBinaryOperator Representa una operación sobre dos operandos de valor doble y produce un resultado de valor doble. |
8 | DoubleConsumer Representa una operación que acepta un único argumento de doble valor y no devuelve ningún resultado. |
9 | DoubleFunction<R> Representa una función que acepta un argumento de doble valor y produce un resultado. |
10 | DoublePredicate Representa un predicado (función de valor booleano) de un argumento de valor doble. |
11 | DoubleSupplier Representa un proveedor de resultados de doble valor. |
12 | DoubleToIntFunction Representa una función que acepta un argumento de valor doble y produce un resultado de valor int. |
13 | DoubleToLongFunction Representa una función que acepta un argumento de valor doble y produce un resultado de valor largo. |
14 | DoubleUnaryOperator Representa una operación en un solo operando de doble valor que produce un resultado de doble valor. |
15 | Function<T,R> Representa una función que acepta un argumento y produce un resultado. |
dieciséis | IntBinaryOperator Representa una operación sobre dos operandos con valor int y produce un resultado con valor int. |
17 | IntConsumer Representa una operación que acepta un único argumento con valor de int y no devuelve ningún resultado. |
18 | IntFunction<R> Representa una función que acepta un argumento con valor int y produce un resultado. |
19 | IntPredicate Representa un predicado (función con valor booleano) de un argumento con valor int. |
20 | IntSupplier Representa un proveedor de resultados con valor internacional. |
21 | IntToDoubleFunction Representa una función que acepta un argumento de valor int y produce un resultado de valor doble. |
22 | IntToLongFunction Representa una función que acepta un argumento de valor int y produce un resultado de valor largo. |
23 | IntUnaryOperator Representa una operación en un solo operando con valor int que produce un resultado con valor int. |
24 | LongBinaryOperator Representa una operación sobre dos operandos de valor largo y produce un resultado de valor largo. |
25 | LongConsumer Representa una operación que acepta un único argumento de valor largo y no devuelve ningún resultado. |
26 | LongFunction<R> Representa una función que acepta un argumento de valor largo y produce un resultado. |
27 | LongPredicate Representa un predicado (función de valor booleano) de un argumento de valor largo. |
28 | LongSupplier Representa un proveedor de resultados valiosos. |
29 | LongToDoubleFunction Representa una función que acepta un argumento de valor largo y produce un resultado de valor doble. |
30 | LongToIntFunction Representa una función que acepta un argumento de valor largo y produce un resultado de valor int. |
31 | LongUnaryOperator Representa una operación en un solo operando de valor largo que produce un resultado de valor largo. |
32 | ObjDoubleConsumer<T> Representa una operación que acepta un argumento con valor de objeto y con valor doble, y no devuelve ningún resultado. |
33 | ObjIntConsumer<T> Representa una operación que acepta un argumento con valor de objeto y un argumento con valor de int, y no devuelve ningún resultado. |
34 | ObjLongConsumer<T> Representa una operación que acepta un argumento con valor de objeto y un argumento de valor largo, y no devuelve ningún resultado. |
35 | Predicate<T> Representa un predicado (función con valor booleano) de un argumento. |
36 | Supplier<T> Representa un proveedor de resultados. |
37 | ToDoubleBiFunction<T,U> Representa una función que acepta dos argumentos y produce un resultado de doble valor. |
38 | ToDoubleFunction<T> Representa una función que produce un resultado de doble valor. |
39 | ToIntBiFunction<T,U> Representa una función que acepta dos argumentos y produce un resultado con valor int. |
40 | ToIntFunction<T> Representa una función que produce un resultado con valor de int. |
41 | ToLongBiFunction<T,U> Representa una función que acepta dos argumentos y produce un resultado de valor largo. |
42 | ToLongFunction<T> Representa una función que produce un resultado de valor largo. |
43 | UnaryOperator<T> Representa una operación en un solo operando que produce un resultado del mismo tipo que su operando. |
Ejemplo de interfaz funcional
La interfaz Predicate <T> es una interfaz funcional con un método de prueba (Objeto) para devolver un valor booleano. Esta interfaz significa que se prueba que un objeto es verdadero o falso.
Cree el siguiente programa Java utilizando cualquier editor de su elección en, digamos, C: \> JAVA.
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);
// Predicate<Integer> predicate = n -> true
// n is passed as parameter to test method of Predicate interface
// test method will always return true no matter what value n has.
System.out.println("Print all numbers:");
//pass n as parameter
eval(list, n->true);
// Predicate<Integer> predicate1 = n -> n%2 == 0
// n is passed as parameter to test method of Predicate interface
// test method will return true if n%2 comes to be zero
System.out.println("Print even numbers:");
eval(list, n-> n%2 == 0 );
// Predicate<Integer> predicate2 = n -> n > 3
// n is passed as parameter to test method of Predicate interface
// test method will return true if n is greater than 3.
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 + " ");
}
}
}
}
Aquí hemos pasado la interfaz Predicate, que toma una sola entrada y devuelve booleano.
Verificar el resultado
Compila la clase usando javac compilador de la siguiente manera:
C:\JAVA>javac Java8Tester.java
Ahora ejecute Java8Tester de la siguiente manera:
C:\JAVA>java Java8Tester
Debería producir el siguiente 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