如何使用另一个列表中的Map属性创建新列表

时间:2018-09-24 11:58:08

标签: java list dictionary java-8 java-stream

想象一下我有一个List<Map<String,Object>>

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

我需要生成另一个列表,包括上面列表中的名称:

List<String>

避免使用循环,是否可以通过使用Java流api来实现?

1 个答案:

答案 0 :(得分:7)

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