La interfaz de función es parte del paquete java.util.function que se introdujo desde Java 8 para implementar la programación funcional en Java. Representa una función que toma un argumento y produce un resultado. Por lo tanto, esta interfaz funcional incluye 2 genéricos, a saber, los siguientes:
- T : denota el tipo del argumento de entrada
- R : denota el tipo de retorno de la función
La expresión lambda asignada a un objeto de tipo Función se usa para definir su aplicación() que finalmente aplica la función dada en el argumento.
Métodos en la interfaz de funciones
La interfaz de función consta de los siguientes 4 métodos que se enumeran y que se analizan más adelante de la siguiente manera:
- aplicar()
- y entonces()
- componer()
- identidad()
Método 1: aplicar()
Sintaxis:
R apply(T t)
Parámetros: este método toma solo un parámetro t que es el argumento de la función
Tipo de devolución: este método devuelve el resultado de la función que es de tipo R.
Ejemplo
Java
// Java Program to Illustrate Functional Interface // Via apply() method // Importing interface import java.util.function.Function; // Main class public class GFG { // Main driver method public static void main(String args[]) { // Function which takes in a number // and returns half of it Function<Integer, Double> half = a -> a / 2.0; // Applying the function to get the result System.out.println(half.apply(10)); } }
5.0
Método 2: andThen()
Devuelve una función compuesta en la que la función parametrizada se ejecutará después de la primera. Si la evaluación de cualquiera de las funciones arroja un error, se transmite al llamador de la función compuesta.
Sintaxis:
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after)
donde V es el tipo de salida de la función posterior y de la función compuesta
Parámetros: este método acepta un parámetro después del cual es la función que se aplicará después de la actual.\
Valor devuelto: este método devuelve una función compuesta que aplica la función actual primero y luego la función posterior
Excepción: este método arroja NullPointerException si la función posterior es nula.
Ejemplo 1:
Java
// Java Program to illustrate addThen() method // Importing interface import java.util.function.Function; // Main class public class GFG { // main driver method public static void main(String args[]) { // Function which takes in a number and // returns half of it Function<Integer, Double> half = a -> a / 2.0; // Now treble the output of half function half = half.andThen(a -> 3 * a); // Applying the function to get the result // and printing on console System.out.println(half.apply(10)); } }
15.0
Ejemplo 2: para demostrar cuándo se devuelve NullPointerException.
Java
// Java Program to illustrate addThen() method // When NullPointerException occurs // Importing interface import java.util.function.Function; // Main class public class GFG { // Main driver method public static void main(String args[]) { // Function which takes in a number and // returns half of it Function<Integer, Double> half = a -> a / 2.0; // Try block to check for exce3ptions try { // Trying to pass null as parameter half = half.andThen(null); } // Catch block to handle exceptions catch (Exception e) { // Print statement System.out.println("Exception thrown " + "while passing null: " + e); } } }
Exception thrown while passing null: java.lang.NullPointerException
Método 3: componer()
Devuelve una función compuesta donde se ejecutará primero la función parametrizada y luego la primera. Si la evaluación de cualquiera de las funciones arroja un error, se transmite al llamador de la función compuesta.
Sintaxis:
default <V> Function<V, R> compose(Function<? super V, ? extends T> before)
Donde V es el tipo de entrada de la función anterior y de la función compuesta
Parámetros: Este método acepta un parámetro antes del cual es la función a aplicar primero y luego la actual
Valor devuelto: este método devuelve una función compuesta que aplica la función actual después de la función parametrizada
Excepción: este método arroja NullPointerException si la función anterior es nula.
Ejemplo 1:
Java
// Java Program to illustrate compose() method // Importing Function interface import java.util.function.Function; // Main class public class GFG { // Main driver method public static void main(String args[]) { // Function which takes in a number and // returns half of it Function<Integer, Double> half = a -> a / 2.0; // However treble the value given to half function half = half.compose(a -> 3 * a); // Applying the function to get the result System.out.println(half.apply(5)); } }
7.5
Ejemplo 2: cuando se devuelve NullPointerException.
Java
// Java Program to illustrate compose() method // Importing Function interface import java.util.function.Function; // Main class public class GFG { // Main driver method public static void main(String args[]) { // Function which takes in a number and // returns half of it Function<Integer, Double> half = a -> a / 2.0; // Try bloc kto check for exceptions try { // Trying to pass null as parameter half = half.compose(null); } // Catch block to handle exceptions catch (Exception e) { // Print statement System.out.println("Exception thrown " + "while passing null: " + e); } } }
Exception thrown while passing null: java.lang.NullPointerException
Método 4: identidad()
Este método devuelve una función que devuelve su único argumento.
Sintaxis:
static <T> Function<T, T> identity()
donde T denota el tipo de argumento y el valor que se devolverá
Devoluciones: este método devuelve una función que devuelve su propio argumento
Ejemplo
Java
// Java Program to Illustrate identity() method // Importing Function interface import java.util.function.Function; // Main class public class GFG { // Main driver method public static void main(String args[]) { // Function which takes in a number and // returns it Function<Integer, Integer> i = Function.identity(); // Print statement System.out.println(i.apply(10)); } }
10