根据元素的属性合并集合
1. 从数据库中获取多个数据集合
2. 先不做属性数据处理,将其合并为一个集合
private List<SaleRecoveryVO> querySaleRecovery(SaleRecoveryDTO dto) {
List<SaleRecoveryVO> queryTicketList = saleRecoveryDao.queryTicketList(dto);
List<SaleRecoveryVO> queryCardList = saleRecoveryDao.queryCardList(dto);
List<SaleRecoveryVO> queryApiTicketList = saleRecoveryDao.queryApiTicketList(dto);
List<SaleRecoveryVO> queryApiCardList = saleRecoveryDao.queryApiCardList(dto);
List<SaleRecoveryVO> queryRechargeList = saleRecoveryDao.queryRechargeList(dto);
List<SaleRecoveryVO> queryApiRechargeList = saleRecoveryDao.queryApiRechargeList(dto);
List<SaleRecoveryVO> mergeList = new ArrayList<>();
mergeList.addAll(queryTicketList);
mergeList.addAll(queryCardList);
mergeList.addAll(queryApiTicketList);
mergeList.addAll(queryApiCardList);
mergeList.addAll(queryRechargeList);
mergeList.addAll(queryApiRechargeList);
mergeList.forEach(list -> {
if (Objects.nonNull(list) && Objects.nonNull(list.getSupplyChannel()))
list.setSupplyChannel(TicketTypeEnum.getTypeMap().get(list.getSupplyChannel()));
});
return mergeResultList(mergeList);
}
3. 根据SupplyChannel合并元素,并将BigDecimal类型的属性相加
private List<SaleRecoveryVO> mergeResultList(List<SaleRecoveryVO> resultList) {
return new ArrayList<>(new ArrayList<>(resultList.stream().collect(Collectors.toMap(SaleRecoveryVO::getSupplyChannel, a -> a, (o1, o2) -> {
o1.setSellPrice(o1.getSellPrice().add(o2.getSellPrice()));
o1.setCollectPrice(o1.getCollectPrice().add(o2.getCollectPrice()));
o1.setVoucherValue(o1.getVoucherValue().add(o2.getVoucherValue()));
o1.setPointDeduction(o1.getPointDeduction().add(o2.getPointDeduction()));
o1.setServiceCharge(o1.getServiceCharge().add(o2.getServiceCharge()));
o1.setTaxPoint(o1.getTaxPoint().add(o2.getTaxPoint()));
o1.setRebate(o1.getRebate().add(o2.getRebate()));
return o1;
})).values()));
}