Как сделать новый список со свойством карты, которая находится в другом списке - PullRequest
0 голосов
/ 24 сентября 2018

Представьте, что у меня есть List<Map<String,Object>>:

[{'id':1,'name':'xyz'},{'id':2,'name':'abc'},{'id':3,'name':'pqr'}]

И мне нужно сгенерировать другой список, включающий имя в приведенном выше списке:

List<String>

Как избежать использования цикла,Можно ли добиться этого с помощью API Java поток?

1 Ответ

0 голосов
/ 24 сентября 2018
List<String> names = list.stream()
                         .map(i -> i.get("name").toString())
                         .collect(Collectors.toList());

Поскольку i.get("name").toString() может производить NPE, разумно отфильтровать карты, которые не содержат ключ "name":

List<String> names = list.stream()
                         .filter(i -> i.containsKey("name"))
                         .map(i -> i.get("name").toString())
                         .collect(Collectors.toList());

или

List<String> names = list.stream()
                         .map(i -> i.get("name"))
                         .filter(Objects::nonNull)
                         .map(Object::toString)
                         .collect(Collectors.toList());
...