Java 8 Stream API 之 map
- map简化代码
//简化前
Map<Integer, PtBloodIdx> bloodIdxMap = listByIds(bloodIds).stream().collect(Collectors.toMap(PtBloodIdx::getId, Function.identity(), (k1, k2) -> k1));
for (PtBloodTree ptBloodTree : trees) {
Integer bloodId = ptBloodTree.getBloodId();
PtBloodIdx ptBloodIdx = bloodIdxMap.get(bloodId);
if (ptBloodIdx == null) {
continue;
}
ChildBloodTreeResVo res = new ChildBloodTreeResVo();
res.setId(ptBloodIdx.getId());
res.setBloodCode(ptBloodIdx.getBloodCode());
res.setBloodName(ptBloodIdx.getBloodName());
resList.add(res);
}
retrun resList;
//简化后
return trees.stream()
.map(tree -> bloodIdxMap.get(tree.getBloodId()))
.filter(Objects::nonNull)
.map(ptBloodIdx -> {
Integer bloodId = .getId();
List<BloodNodeResVo> parentBloods = getParentBloods(bloodId);
return ChildBloodTreeResVo.builder().id(bloodId).bloodCode(ptBloodIdx.getBloodCode()).bloodName(ptBloodIdx.getBloodName()).parentBloods(parentBloods).build();
})
.collect(Collectors.toList());
解释:
- 通过第一个.map直接从tree转换成了PtBloodIdx
- filter过滤后,只保留每一个不为null的对象
- 第二个map开始组装最终的结果里的每一个对象