Tengo una especie mapa de agrupar los valores de clave Map<String, List<Integer>>
, i desea revertir con el fin de asignar cada valor a la clave correspondiente
Ejemplo: Quiero transformar el código de abajo
Map<String, List<Integer>> mapOfIntList = new HashMap<String, List<Integer>>();
mapOfIntList.put("UNIT", Arrays.asList(1, 2, 3, 8, 7, 0, 8, 6));
mapOfIntList.put("TEN", Arrays.asList(24, 90, 63, 87));
mapOfIntList.put("HUNDRED", Arrays.asList(645, 457, 306, 762));
mapOfIntList.put("THOUSAND", Arrays.asList(1234, 3456, 5340, 9876));
a otro mapa (Integer, String) donde puedo encontrar: (1, "UNIDAD"), (2, "UNIDAD") ... (24, "diez"), (90, "diez") ... ( 645, "cien") ... (3456, "MIL") ...
Puedes usar
Map<Integer, String> mapNumberToType = mapOfIntList.entrySet().stream()
.collect(HashMap::new, (m,e)->e.getValue().forEach(v->m.put(v,e.getKey())), Map::putAll);
Usted puede reconocer la similitud con el forEach
código basado de esta respuesta dentro de la segunda función pasó a collect
(acumulador) función. Para una ejecución secuencial, lo hacen básicamente lo mismo, pero esta solución secuencia admite el procesamiento en paralelo. Es por eso que necesita las otras dos funciones, para apoyar la creación de contenedores locales y para combinarlos.
Véase también la reducción mutable sección de la documentación.