【发布时间】:2018-11-13 11:54:11
【问题描述】:
我有一个要求,我想将地图转换为地图列表。
我试过下面的代码,
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);
}
【问题讨论】:
-
如果你发现自己在写
Map<String,Object>,你通常应该改用List or Set<MyClass>。class MyClass { private int pid; private List<Category> categories; }。你的代码看起来很丑,因为它是stringly typed。
标签: java java-8 java-stream collectors