想象一下我有一个List<Map<String,Object>>
:
[{'id':1,'name':'xyz'},{'id':2,'name':'abc'},{'id':3,'name':'pqr'}]
我需要生成另一个列表,包括上面列表中的名称:
List<String>
避免使用循环,是否可以通过使用Java流api来实现?
答案 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());