Java 8 - Interfaces funcionales
Las interfaces funcionales tienen una sola funcionalidad para exhibir. Por ejemplo, se utiliza una interfaz Comparable con un solo método 'compareTo' 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.
| Sr.No. | Interfaz y descripción |
|---|---|
| 1 |
BiConsumidor Representa una operación que acepta dos argumentos de entrada y no devuelve ningún resultado. |
| 2 |
Bifunción Representa una función que acepta dos argumentos y produce un resultado. |
| 3 |
Operador binario Representa una operación sobre dos operandos del mismo tipo, produciendo un resultado del mismo tipo que los operandos. |
| 4 |
Bipredicado Representa un predicado (función de valor booleano) de dos argumentos. |
| 5 | Suministrador booleano Representa un proveedor de resultados con valores booleanos. |
| 6 |
Consumidor Representa una operación que acepta un único argumento de entrada y no devuelve ningún resultado. |
| 7 | Operador binario doble Representa una operación sobre dos operandos de doble valor y produce un resultado de doble valor. |
| 8 | Consumidor doble Representa una operación que acepta un único argumento de doble valor y no devuelve ningún resultado. |
| 9 |
Doble Función Representa una función que acepta un argumento de valor doble y produce un resultado. |
| 10 | Doble Predicado Representa un predicado (función de valor booleano) de un argumento de valor doble. |
| 11 | Doble proveedor Representa un proveedor de resultados de doble valor. |
| 12 | FunciónDoubleToInt Representa una función que acepta un argumento de valor doble y produce un resultado de valor entero. |
| 13 | FunciónDobleALargo Representa una función que acepta un argumento de valor doble y produce un resultado de valor largo. |
| 14 | Operador UnarioDoble Representa una operación en un solo operando de doble valor que produce un resultado de doble valor. |
| 15 |
Función Representa una función que acepta un argumento y produce un resultado. |
| 16 | OperadorBinarioInt Representa una operación sobre dos operandos de valor int y produce un resultado de valor int. |
| 17 | ConsumidorInterno Representa una operación que acepta un único argumento de valor entero y no devuelve ningún resultado. |
| 18 |
FunciónInt Representa una función que acepta un argumento de valor entero y produce un resultado. |
| 19 | PredicadoInt Representa un predicado (función de valor booleano) de un argumento de valor entero. |
| 20 | ProveedorInterno Representa a un proveedor de resultados de valor internacional. |
| 21 | IntToDoubleFunction Representa una función que acepta un argumento de valor entero y produce un resultado de valor doble. |
| 22 | FunciónIntToLong Representa una función que acepta un argumento de valor entero y produce un resultado de valor largo. |
| 23 | OperadorIntUnario Representa una operación en un solo operando de valor int que produce un resultado de valor int. |
| 24 | Operador binario largo Representa una operación sobre dos operandos de valor largo y produce un resultado de valor largo. |
| 25 | Consumidor largo Representa una operación que acepta un único argumento de valor largo y no devuelve ningún resultado. |
| 26 |
Función Larga Representa una función que acepta un argumento de valor largo y produce un resultado. |
| 27 | Predicado largo Representa un predicado (función de valor booleano) de un argumento de valor largo. |
| 28 | Proveedor largo Representa un proveedor de resultados valiosos a largo plazo. |
| 29 | Función Larga ADoble Representa una función que acepta un argumento de valor largo y produce un resultado de valor doble. |
| 30 | FunciónLongToInt Representa una función que acepta un argumento de valor largo y produce un resultado de valor entero. |
| 31 | Operador Unario Largo Representa una operación en un solo operando de valor largo que produce un resultado de valor largo. |
| 32 |
ObjConsumidorDoble Representa una operación que acepta un argumento de valor de objeto y de valor doble, y no devuelve ningún resultado. |
| 33 |
ObjIntConsumidor Representa una operación que acepta un argumento con valor de objeto y con valor de entero, y no devuelve ningún resultado. |
| 34 |
ObjLongConsumer Representa una operación que acepta un argumento con valor de objeto y uno de valor largo, y no devuelve ningún resultado. |
| 35 |
Predicado Representa un predicado (función de valor booleano) de un argumento. |
| 36 |
Proveedor Representa un proveedor de resultados. |
| 37 |
ADobleBiFunción Representa una función que acepta dos argumentos y produce un resultado de doble valor. |
| 38 |
ADobleFunción Representa una función que produce un resultado de valor doble. |
| 39 |
AIntBiFunción Representa una función que acepta dos argumentos y produce un resultado de valor entero. |
| 40 |
AFunciónInt Representa una función que produce un resultado de valor entero. |
| 41 |
ALaBiFunciónLarga Representa una función que acepta dos argumentos y produce un resultado de valor largo. |
| 42 |
AFunciónLarga Representa una función que produce un resultado de valor largo. |
| 43 |
Operador Unario Representa una operación en un solo operando que produce un resultado del mismo tipo que su operando. |
Ejemplo de interfaz funcional
La interfaz de predicado
Cree el siguiente programa Java utilizando cualquier editor de su elección en, por ejemplo, C:\> JAVA.
Java8Tester.java
Demostración en vivo
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 Boolean.
Verificar el resultado
Compile 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
Java