代码之家  ›  专栏  ›  技术社区  ›  Rhushikesh Chaudhari

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

  •  2
  • Rhushikesh Chaudhari  · 技术社区  · 6 年前

    List<Map<String,Object>> :

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

    List<String>
    

    避免使用循环,是否可以通过使用java流api来实现这一点?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Andrew    6 年前
    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());