Test: Descubre qué bootcamp es para ti

whatsapp keepcoding

¿Cómo utilizar java.util.function.Consumer para procesar elementos en Java?

| Última modificación: 8 de enero de 2025 | Tiempo de Lectura: 3 minutos

Durante un tiempo busqué muchas formas para manejar tareas simples, como recorrer una lista y aplicar una acción a cada elemento, pero siempre se me llenaba el código de bucles interminables. Finalmente me topé con java.util.function.Consumer y pude procesar los datos como nunca antes. Lo que quiero aquí es explicarte cómo usarla, por eso te preparé unos ejemplos prácticos que puedes aplicar mientras lees este post.

java.util.function.Consumer qué es

¿Qué es java.util.function.Consumer?

En términos fáciles de entender, esta interfaz como un chef. Haz de cuenta que cada plato que prepara el chef es un elemento de una lista y las acciones como cortar, sazonar o servir, son las operaciones que realiza.

Entonces, java.util.function.Consumer (el chef) toma cada plato (elemento) y aplica una acción específica, sin preocuparse por devolver algo a la cocina. Simplemente hace su trabajo y pasa al siguiente plato.

Por ejemplo:

  • andThen(): El chef realiza una acción tras otra, como cortar los ingredientes y luego mezclarlos.
  • accept(): Es el momento en que el chef corta, sazona o sirve el plato.

Tienes que tener muy presente que, el propósito de esta interfaz es realizar acciones visibles (o efectos secundarios), como imprimir resultados, registrar eventos o modificar valores directamente.

Métodos principales de Consumer

Para usar Consumer tienes que conocer sus métodos:

  1. accept(T t): Este realiza la operación definida sobre el argumento recibido.
  2. andThen(Consumer<? super T> after): Combina dos Consumer, ejecutando uno tras otro.

Ejemplos prácticos de uso de java.util.function.Consumer

Ahora sí, voy a explicarte cómo usar Consumer con ejemplos claros y útiles. De hecho puedes ir poniéndolos en práctica para que lo recuerdes más fácil.

Imprimir elementos de una lista

Quiero mostrarte que este es uno de los usos más básicos pero útiles. Si necesitas recorrer una lista y mostrar cada elemento, tienes que hacer esto:

import java.util.List;
import java.util.function.Consumer;

public class ListPrinter {
public static void main(String[] args) {
List<String> names = List.of("Ana", "Carlos", "María");

Consumer<String> printName = name -> System.out.println(name);

names.forEach(printName);
}
}

Observa el resultado:

Ana  
Carlos
María

Aquí, usé el método forEach de las colecciones, que acepta un Consumer para aplicar la operación a cada elemento.

Modificar elementos en una lista

Supongamos que tienes una lista de números y necesitas multiplicar cada uno por 3:

import java.util.List;
import java.util.function.Consumer;

public class MultiplyNumbers {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4, 5);

Consumer<List<Integer>> multiplyByThree = list -> {
for (int i = 0; i < list.size(); i++) {
list.set(i, list.get(i) * 3);
}
};

numbers.forEach(System.out::println); // Resultado: 3, 6, 9, 12, 15
}
}

Encadenar acciones con andThen()

Como te dije antes, puedes combinar varios Consumer para realizar múltiples operaciones en un solo flujo. Por ejemplo:

import java.util.List;
import java.util.function.Consumer;

public class ChainedConsumers {
public static void main(String[] args) {
List<Integer> numbers = List.of(10, 20, 30);

Consumer<Integer> print = num -> System.out.println("Número: " + num);
Consumer<Integer> doubleValue = num -> System.out.println("Doble: " + (num * 2));

numbers.forEach(print.andThen(doubleValue));
}
}

Este es el resultado:

Número: 10  
Doble: 20
Número: 20
Doble: 40
Número: 30
Doble: 60

Registrar operaciones en un sistema de logs

Ahora imagina que estás construyendo un sistema donde necesitas registrar las operaciones realizadas en una colección de datos.

import java.util.List;
import java.util.function.Consumer;

public class LoggingSystem {
public static void main(String[] args) {
List<String> operations = List.of("Insert", "Update", "Delete");

Consumer<String> logOperation = op -> System.out.println("Operación realizada: " + op);

operations.forEach(logOperation);
}
}

Aplicar estilos a un texto en una lista

Un ejemplo divertido y práctico es modificar cadenas para simular un formato.

import java.util.List;
import java.util.function.Consumer;

public class TextStyler {
public static void main(String[] args) {
List<String> words = List.of("hola", "java", "keepcoding");

Consumer<String> toUpperCase = word -> System.out.println(word.toUpperCase());
Consumer<String> addExclamation = word -> System.out.println(word + "!!!");

words.forEach(toUpperCase.andThen(addExclamation));
}
}

Observa el resultado:

HOLA  
HOLA!!!
JAVA
JAVA!!!
KEEPCODING
KEEPCODING!!!

Me parece excelente que ahora sepas todo sobre java.util.function.Consumer. Yo sí te dije que es una herramienta poderosa con la que puedes procesar datos de forma limpia y eficiente. Si te interesa dominar conceptos como este y aprender a implementar programación funcional en Java, en el Bootcamp de Java Full Stack de KeepCoding encontrarás las mejores técnicas para convertirte en un desarrollador completo. ¡Inscríbete hoy y da el salto hacia una carrera en el mundo IT!

Posts más leídos