¿Para qué sirven las interfaces funcionales Consumer<T>, DoubleConsumer, IntConsumer y LongConsumer?
sobes.tech AI
Respuesta de la IA
Las interfaces funcionales Consumer<T>, DoubleConsumer, IntConsumer y LongConsumer se utilizan para representar operaciones que aceptan un argumento de entrada y no devuelven resultado. Forman parte del paquete java.util.function.
Consumer<T>: Acepta un argumento de cualquier tipoT.DoubleConsumer: Acepta un argumento de tipodouble. Es una especialización primitiva deConsumer, lo que permite evitar el autoboxing y funciona de manera más eficiente.IntConsumer: Acepta un argumento de tipoint. También es una especialización primitiva para mejorar la eficiencia.LongConsumer: Acepta un argumento de tipolong. Otra especialización primitiva.
El uso principal de estas interfaces es en Lambdas y referencias a métodos. Se utilizan frecuentemente en la API de streams de Java para realizar efectos secundarios en los elementos del stream, por ejemplo, para imprimir en la consola o modificar un estado externo.
Ejemplo de uso de Consumer<T>:
// Crear un Consumer que imprime una cadena
Consumer<String> printConsumer = s -> System.out.println(s);
// Usar el Consumer
printConsumer.accept("¡Hola, mundo!");
// Uso en un stream
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().forEach(n -> System.out.println(n)); // Uso de Consumer (lambda)
Ejemplo de uso de IntConsumer:
// Crear un IntConsumer que imprime un número
IntConsumer printIntConsumer = i -> System.out.println(i);
// Usar el IntConsumer
printIntConsumer.accept(10);
// Uso en un stream de ints primitivos
IntStream.range(1, 5).forEach(printIntConsumer); // Más eficiente para tipos primitivos
Las especializaciones primitivas (DoubleConsumer, IntConsumer, LongConsumer) deben preferirse a sus análogos genéricos Consumer<T> cuando se trabaja con tipos primitivos para mejorar el rendimiento al evitar operaciones de boxing/unboxing.