PageList modelPageList =
iCouponExcitingActivityService
.findCouponExcitingActivityList(couponExcitingActivitySO, pagerCondition);
PageList voPageList = new PageList<>();
List voList =
CouponExcitingActivityVO.convertToVOList(modelPageList.getDataList());
List cityIdList = voList.stream()
.map(p -> p.getCityIdList())
.flatMap(p -> p.stream())
.distinct()
.collect(Collectors.toList());
Map cityIdMap = iJiupiCityService.findJiupiCityListByCityIdList(cityIdList);
voList.stream().forEach(v -> {
List cityIds = v.getCityIdList();
List jiupiCitys = new ArrayList<>();
if (CollectionUtils.isNotEmpty(cityIds)) {
for (Integer id : cityIds) {
JiupiCity jiupiCity = cityIdMap.get(id);
jiupiCitys.add(jiupiCity);
}
v.setJiupiCitys(jiupiCitys);
}
});
voPageList.setDataList(voList);
voPageList.setPager(modelPageList.getPager());
return voPageList;
---------------------------------java8中flatMap---------------------------------------------
flatMap的使用 .flatMap(p -> p.stream())/.flatMap(Arrays::stream)中将集合中的所有id拆分为单个的流元素------>在map中,这个集合中所有的元素组合为一个流对象,flatMap将这个流对象中的所有元素拆分出来,分解为多个流对象,一个流对象只有一个元素,然后distinct去重,再收集组合为新的集合。
---------------------------关于遍历问题中接收数据对象new的疑惑-----------------------------
错误代码:
List jiupiCitys = new ArrayList<>();
Map cityIdMap = iJiupiCityService.findJiupiCityListByCityIdList(cityIdList);
voList.stream().forEach(v -> {
List cityIds = v.getCityIdList();
jiupiCitys.clear();
if (CollectionUtils.isNotEmpty(cityIds)) {
for (Integer id : cityIds) {
JiupiCity jiupiCity = cityIdMap.get(id);
jiupiCitys.add(jiupiCity);
}
v.setJiupiCitys(jiupiCitys);
}
});
voPageList.setDataList(voList);
错误场景:本应该对应记录得到对应的城市信息, 在 v.setJiupiCitys(jiupiCitys);中,每条记录获得城市数据是正确的,但是在遍历结束,voPageList.setDataList(voList);中,所有记录的城市数据全部是最后一条记录的城市数据。
思考: List jiupiCitys = new ArrayList<>();放在循环体内,放在循环体外,为什么会对最终的数据产生影响????
List list = new ArrayList(productSkuIds);
List list = productSkuIds.stream().collect(Collectors.toList());