JAVA8 list通过元素分组后,list中对象属性累加,返回对象
需求:
通过项目ID分组,相同项目的金额累加,返回一个通过项目分组后的对象
public static void main(String[] args) {
List<TaskPaySaveVO> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
TaskPaySaveVO taskPaySaveVO = new TaskPaySaveVO();
if(i == 0){
taskPaySaveVO.setProjectId(Convert.toLong(i +1));
}else{
taskPaySaveVO.setProjectId(Convert.toLong(i));
}
taskPaySaveVO.setAccountsPayable(BigDecimal.ONE);
taskPaySaveVO.setPayDiscountAccount(BigDecimal.ONE);
taskPaySaveVO.setAmountNotInvoiced(BigDecimal.ONE);
list.add(taskPaySaveVO);
}
Map<Long, TaskPaySaveVO> taskPaymentGroupByProject = list.stream()
.collect(Collectors.toMap(TaskPaySaveVO::getProjectId,
Function.identity(),
(n, o) -> {
n.setPayDiscountAccount(n.getPayDiscountAccount().add(o.getPayDiscountAccount()));
n.setAccountsPayable(n.getAccountsPayable().add(o.getAccountsPayable()));
n.setAmountNotInvoiced(n.getAmountNotInvoiced().add(o.getAmountNotInvoiced()));
return n;
}));
taskPaymentGroupByProject.forEach((k,v) -> {
System.out.println("project:" + k);
System.out.println("vo:" + v);
});
}