En tus dos ejemplos
.collect(groupingBy(Dish::getType));
.collect(groupingBy(Dish::getType, mapping(Dish::getName, toList())));
valor de retorno igual porque su toString()
método en Dish
clase name
solo devuelve . Intenta agregar más información a toString()
mehtod y verás la diferencia.
En general, usar groupingBy
solo un clasificador permite agrupar objetos, como en su primer ejemplo. Pero usarlo goupingBy
con clasificador y en sentido descendente le permite agrupar mucho más que solo sus objetos. Por ejemplo, puede agrupar las calorías promedio por tipo :
.collect(groupingBy(Dish::getType, averagingInt(Dish::getCalories)); // Map<Type, Double>
O encuentre el plato más calórico de cada tipo :
.collect(groupingBy(Dish::getType, maxBy(Comparator.comparingInt(Dish::getCalories))); // Map<Type, Optional<Dish>>
A menudo groupingBy
se usa como un flujo descendente en sí mismo para la agrupación doble (por tipo y si es vegetariano):
.collect(groupingBy(Dish::getType, groupingBy(Dish::isVegetarian)); // Map<Type, Map<Boolean, List<Dish>>>
Si esta es la pregunta
Porque tanto el código arroja los mismos resultados. Uno usa return groupingBy (clasificador, toList ()); y devolver groupingBy (clasificador, HashMap :: new, downstream); ?
groupingBy (clasificador de funciones, recopilador en sentido descendente)
No hay garantías sobre el tipo, mutabilidad, serialización o seguridad de subprocesos del Mapa devuelto.
groupingBy (clasificador de funciones, proveedor mapFactory, recopilador en sentido descendente)
El mapa producido por el recopilador se crea con la función de fábrica suministrada.
La única diferencia es que cuando se utiliza groupingBy
con mapFactory
lo Map
creado se basa en la lógica de su proveedor (puede ser personalizado, inmutable, sincronizado, etc.)
Tengo la siguiente biblioteca compartida JNI ubicada en / data / subv / Mem, he configurado LD_LIBRARY_PATH en: LD_LIBRARY_PATH = / data / subv / Mem que contiene dos archivos: bmemBridgelib.so y memBridgelib ...
¿Cómo obtener valores RGB usando JMagick (un contenedor de imagemagick)?
En el pasado, un código similar como el siguiente funcionaba bien para obtener solo uno o dos tipos de cambio de los datos XML del banco, sin aplicar la sobrecarga de un analizador XML. Pero ahora los personajes leen ...
Tengo un código en Java con Eclipse y me gustaría implementarlo en entornos Unix. El programa es un programa de consola simple que solo toma algunos argumentos en el tiempo de ejecución, lee un archivo e imprime ...