如何在JAVA8中使用Lambda将List <T>转换为List <Map <K,V >>

Stu*_*dPz 3 lambda java-8

我希望获得一些对象的属性,List<Object>并将它们放入List<Map<String,Object>>使用java8的lambda中.在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);
        }
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

您可以将每个映射HouseModel到a 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());
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是Java 9,并且不介意创建的Maps是不可变的:

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

  • @Eugene除了将所有条目放在同一个HashMap实例中的错误. (2认同)