Function y BiFunction
Transforme valores de forma funcional
Function y BiFunction es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
Qué representa Function
Function<T, R> es la interfaz de transformación principal de java.util.function. Recibe un argumento de tipo T y devuelve un resultado de tipo R.
- Su único método abstracto es
R apply(T t). - Modela una transformación pura de la entrada a la salida.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, Integer> length = s -> s.length();
System.out.println(length.apply("hello"));
}
}Llamar a apply
Se invoca una Function llamando a apply. El cuerpo de la lambda contiene la lógica de transformación.
- Los tipos de entrada y salida pueden ser diferentes.
- Una referencia a método como
String::toUpperCasepuede sustituir a una lambda.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> upper = String::toUpperCase;
System.out.println(upper.apply("java"));
}
}Composición con andThen
andThen encadena funciones: el resultado de la primera se convierte en la entrada de la segunda.
f.andThen(g)significa g(f(x)).- Se lee de izquierda a derecha.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> times2 = n -> n * 2;
Function<Integer, Integer> plus3 = n -> n + 3;
System.out.println(times2.andThen(plus3).apply(5));
}
}Composición con compose
compose ejecuta primero la función recibida como argumento.
f.compose(g)significa f(g(x)).- Es la imagen especular de
andThen.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> times2 = n -> n * 2;
Function<Integer, Integer> plus3 = n -> n + 3;
System.out.println(times2.compose(plus3).apply(5));
}
}Function.identity
Function.identity() devuelve una función que devuelve su entrada sin modificarla.
- Es útil en collectors de streams y asignaciones predeterminadas.
- Es equivalente a
x -> x.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> id = Function.identity();
System.out.println(id.apply("unchanged"));
}
}Conozca BiFunction
BiFunction<T, U, R> recibe dos argumentos y devuelve un resultado.
- Su método es
R apply(T t, U u). - Es ideal para combinar dos valores, como al fusionar mapas.
import java.util.function.BiFunction;
public class Main {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
System.out.println(add.apply(4, 6));
}
}BiFunction con tipos mixtos
Los tres parámetros de tipo de BiFunction pueden ser diferentes.
- Aquí combinamos un
Stringy unintpara obtener unString.
import java.util.function.BiFunction;
public class Main {
public static void main(String[] args) {
BiFunction<String, Integer, String> repeat = (s, n) -> s.repeat(n);
System.out.println(repeat.apply("ab", 3));
}
}BiFunction y andThen
BiFunction también admite andThen, que recibe una Function de un solo argumento para procesar posteriormente el resultado.
BiFunctionno tienecomposeporque necesitaría dos entradas.
import java.util.function.BiFunction;
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
Function<Integer, String> label = n -> "sum=" + n;
System.out.println(add.andThen(label).apply(7, 8));
}
}Funciones en colecciones
Muchas API aceptan una Function. Por ejemplo, Map.computeIfAbsent recibe una función de mapeo para las claves que faltan.
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> lengths = new HashMap<>();
lengths.computeIfAbsent("hello", String::length);
System.out.println(lengths);
}
}Almacenar funciones en variables
Como las funciones son objetos, puede almacenarlas, pasarlas y devolverlas. Esta es la base del estilo funcional en Java.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> square = n -> n * n;
Function<Integer, Integer> cube = n -> n * n * n;
Function<Integer, Integer> chosen = square;
System.out.println(chosen.apply(5));
}
}Construcción de una canalización
Encadenar andThen repetidamente crea una canalización de transformación legible y reutilizable.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<String, String> trim = String::trim;
Function<String, String> upper = String::toUpperCase;
Function<String, Integer> len = String::length;
System.out.println(trim.andThen(upper).andThen(len).apply(" abc "));
}
}Comprobación rápida
¿Qué calcula f.andThen(g).apply(x)?
Recapitulación
Ha aprendido las interfaces de transformación principales:
Function<T,R>transforma un valor medianteapply.andThenencadena hacia delante (g(f(x)));composeencadena hacia atrás (f(g(x))).Function.identity()devuelve su entrada.BiFunction<T,U,R>gestiona dos entradas y admiteandThen, pero nocompose.
Preguntas frecuentes
¿La lección «Function y BiFunction» es gratis?
Sí — el texto completo de «Function y BiFunction» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Function y BiFunction»?
Transforme valores de forma funcional Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Function y BiFunction»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Function y BiFunction
- Supplier y Consumer
- Predicate y composición
- Interfaces funcionales personalizadas