Funciones Java para Transformación de Datos y Operaciones Binarias
Clase 14 de 39 • Curso de Programación Funcional con Java SE
Contenido del curso
- 2

Funciones en Programación Funcional: Conceptos Básicos
03:15 - 3

Funciones como Ciudadanos de Primera Clase en Programación
02:39 - 4

Funciones Puras: Concepto y Ejemplos Prácticos
04:05 - 5

Efectos Secundarios en Programación y su Impacto en el Código
03:12 - 6

Funciones de Orden Superior en Programación
02:28 - 7

Funciones Lambda en Programación Funcional Java
03:30 - 8

Inmutabilidad de Datos en Programación Funcional con Java
11:16
- 9
Programación Funcional en Java SE: Conceptos y Prácticas
00:06 - 10

Programación Funcional en Java: Práctica y Ejemplos en IntelliJ
02:48 - 11

Programación Funcional en Java: Creación y Uso de Funciones
04:03 - 12

Programación Funcional con Predicados en Java
04:57 - 13

Interfaz Consumer y Supplier en Java: Uso y Ejemplos Prácticos
03:54 - 14

Funciones Java para Transformación de Datos y Operaciones Binarias
07:10 - 15

Creación y Uso de Interfaces Funcionales Personalizadas en Java
08:51 - 16

Métodos de Referencia en Programación Funcional Java
04:46 - 17

Inferencia de tipos en Java: funciones y métodos
03:53 - 18

Uso de Expresiones Lambda en Java: Sintaxis y Aplicaciones
12:47 - 19

Interfaz Funcional en Java: Creación y Uso de Métodos Default
04:59 - 20

Encadenamiento de Llamadas en Programación Orientada a Objetos
03:52 - 21

Composición de Funciones en Programación Funcional
06:06
- 22

Uso de la Clase Optional en Java para Manejo de Valores Nulos
12:59 - 23

Manipulación de Streams en Java: Operaciones y Limitaciones
10:18 - 24

Programación Funcional en Java: Uso de Streams y Operaciones Terminales
07:21 - 25
Operaciones de Stream en Java: Intermedias y Finales
05:05 - 26

Operaciones y Concurrente con Stream en Java
05:51 - 27
Operaciones Terminales en Java Streams
06:18 - 28
Operaciones Intermedias en Streams de Java
09:21 - 29

Conversión de Strings a Listas de Enteros en Java
06:14
- 30

Construcción de Proyecto para Buscar Empleo Usando APIs
01:17 - 31

Configuración y Uso de Gradle en Proyectos Java con IntelliJ
03:23 - 32

Creación de una Herramienta de Búsqueda de Trabajo en Terminal
01:51 - 33

Creación de Puntos de Entrada y Dependencias en Proyectos Java
05:54 - 34

Creación de APIs RESTful con Feign y Spring Boot
09:31 - 35

Creación de una Interfaz de Línea de Comandos con JCommander
13:05 - 36

Validación de Argumentos en Terminal con Clases en Ciel
04:32 - 37

Procesamiento de Argumentos y Solicitudes API en Java
11:38 - 38

Creación de API para búsqueda de empleos con Java y CLI
08:31
¿Cómo trabajar con predicados y funciones en Java?
Al adentrarnos en el mundo de la programación funcional en Java, encontramos múltiples herramientas que simplifican el manejo de operaciones complejas. A lo largo de esta clase, hemos explorado funciones que permiten validar predicados y generar nuevos tipos de datos a partir de otros. Estas funciones se engloban en lo que se conoce como operadores y proyectos. En esta sección, te guiaré a través del uso de operadores binarios y bi-funciones, fundamentales para optimizar nuestro código en Java.
¿Qué es un BinaryOperator y cómo se utiliza?
En Java, un BinaryOperator es una funcionalidad que opera sobre un cierto tipo definido, es decir, trabaja con un solo tipo, tanto de entrada como de salida. Este concepto es parte del paquete java.util.function.
Para ilustrar su uso, crearemos una función estática que tomará un texto y le añadirá comillas:
import java.util.function.BinaryOperator;
public class StringFunctions {
public static void main(String[] args) {
BinaryOperator<String> quoteAdder = (text, quote) -> quote + text + quote;
System.out.println(quoteAdder.apply("Hola", "\""));
}
}
En este ejemplo, la función quoteAdder toma un texto y lo devuelve rodeado de comillas, demostrando la simplicidad y efectividad de los operadores binarios.
¿Cómo funcionan las bi-funciones (BiFunctions)?
Las BiFunction son fundamentales cuando necesitamos trabajar con más de un parámetro. A diferencia de las funciones simples que manejan un solo tipo de datos, las BiFunction pueden recibir dos tipos de datos de entrada y generar un tercer tipo como resultado.
A continuación, creamos una bi-función para realizar multiplicaciones:
import java.util.function.BiFunction;
public class MathFunctions {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> multiplication = (x, y) -> x * y;
System.out.println(multiplication.apply(5, 4));
}
}
Aquí, la función de multiplicación toma dos enteros y devuelve el producto de ambos, mostrando la flexibilidad y potencia de las BiFunctions.
¿Qué es una BiFunction y cómo optimizar su uso?
Además de las BiFunction tradicionales, podemos encontrar variantes que permiten trabajar eficientemente con un solo tipo de dato, como el BinaryOperator antes mencionado. La BinaryOperator se simplifica si tanto los datos de entrada como el resultado son del mismo tipo.
Un ejemplo clásico es el formateo de texto, donde queremos adicionar espacios a un String:
import java.util.function.BiFunction;
public class StringFormatter {
public static void main(String[] args) {
BiFunction<String, Integer, String> addSpaces = (text, spaces) ->
String.format("%" + spaces + "s", text);
System.out.println(addSpaces.apply("Java", 10));
}
}
En este caso, addSpaces toma un String y un Integer (la cantidad de espacios) y produce un nuevo String con el texto formateado, demostrando cómo se pueden crear funciones reutilizables y eficientes.
¿Cómo aplicar estas funciones en proyectos reales?
El verdadero valor de comprender estas funcionalidades radica en su aplicación práctica. Piensa en un programa que deba leer archivos y darles formato en múltiples maneras. Podrías definir una lista de BiFunction para formatear texto basándote en diversos requisitos, lo que facilitaría la gestión y modificación del código en el futuro:
- Formateo de texto: Añade comillas, ajusta espacios y modifica caracteres.
- Calculadora compleja: Realiza operaciones matemáticas que requieren más de dos parámetros.
Con estos conceptos, puedes comenzar a crear estructuras de código más limpias, modulares y potentes, permitiéndote compartir y reutilizar lógica de forma eficiente. Aprender a dominar estas herramientas no solo enriquecerá tu experiencia en Java, sino que también te dará las habilidades necesarias para enfrentar proyectos complejos con confianza. ¡Sigue explorando y expandiendo tus conocimientos en programación funcional!