Rishikesh Chaudhari:
Imagine que eu tenho um List<Map<String,Object>>
:
[{'id':1,'name':'xyz'},{'id':2,'name':'abc'},{'id':3,'name':'pqr'}]
E eu preciso gerar uma outra lista incluindo o nome na lista acima:
List<String>
Evitando usando um loop, é possível conseguir isso usando java api stream?
Andrew Tobilko:
List<String> names = list.stream()
.map(i -> i.get("name").toString())
.collect(Collectors.toList());
Desde i.get("name").toString()
pode produzir um NPE, é inteligente para filtrar os mapas que não contêm a chave "name"
:
List<String> names = list.stream()
.filter(i -> i.containsKey("name"))
.map(i -> i.get("name").toString())
.collect(Collectors.toList());
ou
List<String> names = list.stream()
.map(i -> i.get("name"))
.filter(Objects::nonNull)
.map(Object::toString)
.collect(Collectors.toList());