La semana pasada, describí un caso de uso para una transmisión personalizada Collector. Recibí un comentario intrigante en Twitter:
¡Me quito el sombrero ante ti, Miguel! ¡Tu comentario reveló un método que no conocía!
Así que decidí investigar de qué se trata el teeing()método.
Devuelve un recopilador que es un compuesto de dos recopiladores posteriores. Cada elemento que se pasa al recolector resultante es procesado por ambos recolectores posteriores, luego sus resultados se combinan usando la función de combinación especificada en el resultado final.
Las funciones de recopilador resultantes hacen lo siguiente:
* proveedor: crea un contenedor de resultados que contiene contenedores de resultados obtenidos llamando al proveedor de cada recolector
* acumulador: llama al acumulador de cada colector con su contenedor de resultados y el elemento de entrada
* combinador: llama al combinador de cada colector con dos contenedores de resultados
* finalizador: llama al finalizador de cada recopilador con su contenedor de resultados, luego llama a la fusión proporcionada y devuelve su resultado.
- JavaDocs
De hecho, podemos reemplazar nuestra costumbre Collectorcon dos Collectorimplementaciones simples , una agregando filas de precios y la otra sumando el precio del carrito.
Veamos el código final y expliquemos línea por línea.
public PriceAndRows getPriceAndRows(Cart cart) {
return cart.getProducts()
.entrySet()
.stream()
.map(CartRow::new) // 1
.collect(Collectors.teeing( // 2
Collectors.reducing( // 3
BigDecimal.ZERO, // 4
CartRow::getRowPrice, // 5
BigDecimal::add), // 6
Collectors.toList(), // 7
PriceAndRows::new // 8
));
}
teeing()métodoreducing()llamada, con:Pricede unCartRowBinaryOperatorpara sumar dos precios juntosCartRowen una listaCollector, es decir , supplier(), `accumulator(), combiner()yfinisher()Collectorpasando los paresEspero que esta publicación te haya hecho considerar usar teeing() antes de crear un archivo Collector. ¡Gracias de nuevo a Miguel!
Por cierto, siempre estoy feliz de aprender cosas nuevas. En caso de que tenga ideas para compartir, puede usar el sistema de comentarios a continuación o Twitter.
El código fuente completo de esta publicación se puede encontrar en Github en formato Maven.
Introducción Apache Kafka es una plataforma de transmisión distribuida de código abierto que maneja la transmisión de datos en tiempo real tolerante a fallas, de alto rendimiento y a gran escala. El sistema se basa en un modelo de publicación-suscripción en el que los productores publican mensajes sobre temas y los consumidores se suscriben a esos temas para consumir los mensajes.
El desarrollo móvil se ha convertido en un componente vital para que las empresas tengan éxito en el mundo digital actual. Como desarrollador de aplicaciones móviles, es fundamental elegir el lenguaje de programación adecuado para crear su aplicación.
Por Alyson Lee, asesora de gestión de asuntos gubernamentales El proceso de asignaciones anuales del gobierno federal es fundamental para nuestros esfuerzos por financiar la eliminación de dióxido de carbono (CDR). Cada año, Carbon180 envía solicitudes a varias oficinas del Congreso para ayudar a guiar hacia dónde fluirán los dólares del próximo año.
[Alerta de activación: este ensayo incluye capturas de pantalla de personas que elogiaron al asesino de Jordan Neely.] Los funcionarios encargados de hacer cumplir la ley finalmente, y quizás a regañadientes, acusaron a Daniel Penny, el hombre que estranguló a Jordan Neely hasta que murió, por ese homicidio.
La picazón en mi mano se extendió mientras negociaba con el librero local por otro libro. Este libro, como el resto que compré recientemente, encontraría su trono en mi pila de 'To Be Read' (TBR); y sin embargo, lo compré.