代码之家  ›  专栏  ›  技术社区  ›  KayV

将地图转换为地图列表

  •  2
  • KayV  · 技术社区  · 7 年前

    我有一个要求,我想转换成地图列表地图。

    我尝试了以下代码,

    List<Map<String, Object>> response = new ArrayList<>();
    Set<Long> categories = new HashSet<>();
    
    List<CCP> ccpList = ccpRepository.findByPIdIn(ids);
    Map<Integer, List<Integer>> categoriesByProduct = ccpList.stream()
                      .collect(Collectors.groupingBy(ccp -> ccp.getPId(), Collectors.mapping(ccp-> ccp.getCId(), Collectors.toList())));
    for(Entry<Integer, List<Integer>> en : categoriesByProduct.entrySet()) {
        Map<String,Object> responseObject = new HashMap<>();
        responseObject.put("pid", en.getKey());
        responseObject.put("categories",en.getValue());
        response.add(responseObject);
    }
    

    有什么方法可以用java 8风格修改以下代码:

    for(Entry<Integer, List<Integer>> en : categoriesByProduct.entrySet()) {
        Map<String,Object> responseObject = new HashMap<>();
        responseObject.put("pid", en.getKey());
        responseObject.put("categories",en.getValue());
        response.add(responseObject);
    }
    
    2 回复  |  直到 7 年前
        1
  •  4
  •   Mani    7 年前

    response = categoriesByProduct.entrySet()
                                  .stream()
                                  .map(e -> toMap(e))
                                  .collect(Collectors.toList());
    
    public static Map<String, Object> toMap(Map.Entry<Integer, List<Integer>> en) {
        Map<String,Object> responseObject = new HashMap<>();
        responseObject.put("pid", en.getKey());
        responseObject.put("categories",en.getValue());
        return responseObject;
    }
    
        2
  •  2
  •   Ravindra Ranwala    7 年前

    你可以这样做,

    List<Map<String, Object>> result = categoriesByProduct.entrySet().stream()
        .map(e -> Stream
            .of(new AbstractMap.SimpleEntry<String, Object>("pid", e.getKey()),
                new AbstractMap.SimpleEntry<String, Object>("categories", e.getValue()))
                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)))
        .collect(Collectors.toList());