Inverter Mapa com valor de lista Map <Key, List <Valor >> para Map <Valor, Key> em Java 8

Shessuky:

Eu tenho um mapa tipo de agrupamento de valores por chave Map<String, List<Integer>>, eu quiser reverter a fim de mapear cada valor para a chave correspondente

Exemplo: Eu quero transformar o código abaixo

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 outra Mapa (Integer, String) onde eu posso encontrar: (1, "UNIT"), (2, "UNIT") ... (24, "dez"), (90, "dez") ... ( 645, "CEM") ... (3456, "mil") ...

Holger:

Você pode usar

Map<Integer, String> mapNumberToType = mapOfIntList.entrySet().stream()
    .collect(HashMap::new, (m,e)->e.getValue().forEach(v->m.put(v,e.getKey())), Map::putAll);

Você pode reconhecer a semelhança com o forEachcódigo baseado de esta resposta dentro da segunda função passado para collect(acumulador) função. Para uma execução sequencial, eles fazem basicamente a mesma, mas esta solução Fluxo suporta processamento paralelo. É por isso que ele precisa as outras duas funções, para apoiar a criação de recipientes locais e fundi-los.

Veja também a redução mutável seção da documentação.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=171421&siteId=1
Recomendado
Clasificación