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()