如何将List <t>转换为List <map <k,v>&gt;在JAVA8中使用Lambda

时间:2018-02-08 09:51:30

标签: lambda java-8

我希望在List<Object>中获取一些对象的属性,并使用java8的lambda将它们放入List<Map<String,Object>>。在Java7中我会以这种方式编写。为了使这个可读我想用Java8的Lambda以另一种方式翻译它。

    List<HouseModel> _house = new ArrayList<>();
    List<Map<String, String>> list = new ArrayList<>();
    Map<String, String> map = new HashMap<>(2);
        for (HouseModel h : _house) {
            map.put("address", h.getAddress());
            map.put("number", h.getHouseNum());
            list.add(map);
        }

1 个答案:

答案 0 :(得分:5)

您可以将每个HouseModel映射到Map<String,String>,然后收集到List

List<Map<String, String>> list =
    _house.stream()
          .map(h -> {Map<String,String> map = new HashMap<>(); 
                     map.put("address", h.getAddress());
                     map.put("number", h.getHouseNum());
                     return map;
                    })
          .collect(Collectors.toList());

或者,如果您使用的是Java 9,请不要介意创建的Map是不可变的:

List<Map<String, String>> list =
    _house.stream()
          .map(h -> Map.of("address", h.getAddress(),"number", h.getHouseNum()))
          .collect(Collectors.toList());