Mesclar mapeia a partir de uma lista de mapas java8

user1912054:

Olá colegas desenvolvedores, Need seus conhecimentos sobre abaixo problema que tenho um abaixo lista de entrada de mapas

Map<String, Object> m1 = new HashMap<String, Object>();
    m1.put("name", "alex");
    m1.put("age", "40");
    l1.add(m1);
    m1 = new HashMap<String, Object>();
    m1.put("name", "alex");
    m1.put("state", "Texas");
    l1.add(m1);

    m1 = new HashMap<String, Object>();
    m1.put("name", "alice");
    m1.put("age", "35");
    l1.add(m1);
    m1 = new HashMap<String, Object>();
    m1.put("name", "alice");
    m1.put("state", "Arizona");
    l1.add(m1);

    m1 = new HashMap<String, Object>();
    m1.put("name", "bob");
    m1.put("age", "25");
    l1.add(m1);
    m1 = new HashMap<String, Object>();
    m1.put("name", "bob");
    m1.put("state", "Utah");
    l1.add(m1);

Eu quero a lista de mapa de saída como abaixo usando java 8 streams-

[{name="alex", age="40", state="Texas"}
{name="alice", age="35", state="Arizona"}
{name="bob", age="25", state="Utah"}]

Agradeço qualquer ajuda aqui.

Hadi J:

Você pode usar o toMap()coletor com função de mesclagem.

l1.stream()
   .collect(Collectors.toMap(m -> m.get("name").toString(), Function.identity(),
               (map1, map2) -> { map1.putAll(map2); return map1;})
           )
   .values();

Na verdade nesta solução, nos fundimos mapas baseados em nome de valor de chave. por isso, se dois mapas têm o mesmo valor para o nome de chave, então eles irão se fundir. desde toMap () resultado de colecionador é Map<String,Map<String,Object>>aqui e resultado desejo é Map<String,Object>por isso que chamamosvalues()

Acho que você gosta

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