streams procesamiento parte datos con array java lambda java-8

procesamiento - list to array java 8



Java 8 Stream agrupamiento por (3)

El método groupingBy produce un mapa cuyos valores son listas. Si desea procesar esas listas de alguna manera, proporcione un "colector en sentido descendente". En su caso, no quiere una lista como valor, por lo que debe proporcionar un colector en sentido descendente.

Para manipular el mapa, puede usar el método estático en el archivo de recopiladores:

Collector<T, ?, R> mapping(Function<? super T, ? extends U> mapper, Collector<? super U, A, R> downstream)

Básicamente, genera un colector aplicando una función a los resultados posteriores y pasa la función a otro colector.

Collectors.mapping(item->item.get("firstName"), Collectors.toList())

Esto devolverá un colector aguas abajo que logrará lo que desea.

Tengo List<Map<String, String>> cada elemento de la lista es un mapa, por ejemplo

companyName - IBM firstName - James country - USA ...

Me gustaría crear un Map<String, List<String>> donde se asigne companyName a una lista de primer nombre, por ejemplo

IBM -> James, Mark ATT -> Henry, Robert.. private Map<String,List<String>> groupByCompanyName(List<Map<String, String>> list) { return list.stream().collect(Collectors.groupingBy(item->item.get("companyName"))); }

pero esto creará Map<String, List<Map<String, String>> (mapeando comanyName a una lista de mapas)

¿Cómo crear un Map<String, List<String>> ?


No lo he probado, pero algo como esto debería funcionar:

Map<String, List<String>> namesByCompany = list.stream() .collect(Collectors.groupingBy(item->item.get("companyName"), Collectors.mapping(item->item.get("firstName"), Collectors.toList())));


Puede utilizar el formulario:

groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream)

es decir, especifique los valores del mapa en el sentido descendente para ser tomado como lista. La documentación tiene buen ejemplo para ello ( here ).

downstream es algo así como - mapping(item->item.get(<name>), toList())