java的list实现分组求和
对list的数据按某些属性进行分组,然后对组内某些属性求和,类似sql的group by功能。例如以下以机构和客户号组合分组,对debt求和,最后形成一个新的listpublic static void main(String[] args) {DebtCust d1 = new DebtCust().setDeptId(1L).setCustCode("1").setDebt(new BigDe
·
对list的数据按某些属性进行分组,然后对组内某些属性求和,类似sql的group by功能。
例如以下以机构和客户号组合分组,对debt求和,最后形成一个新的list
public static void main(String[] args) {
DebtCust d1 = new DebtCust().setDeptId(1L).setCustCode("1").setDebt(new BigDecimal("5.1"));
DebtCust d2 = new DebtCust().setDeptId(2L).setCustCode("2").setDebt(new BigDecimal("5.1"));
DebtCust d3 = new DebtCust().setDeptId(1L).setCustCode("1").setDebt(new BigDecimal("5.0"));
DebtCust d4 = new DebtCust().setDeptId(3L).setCustCode("1").setDebt(new BigDecimal("5.0"));
DebtCust d5 = new DebtCust().setDeptId(2L).setCustCode("2").setDebt(new BigDecimal("5.1"));
List<DebtCust> debtCustList = Arrays.asList(new DebtCust[]{d1, d2, d3, d4, d5});
List<DebtCust> newList = new ArrayList<>();
debtCustList.parallelStream().collect(Collectors.groupingBy(d -> d.getDeptId() + d.getCustCode(), Collectors.toList()))
.forEach((id, groupList) -> {
groupList.stream().reduce(
(a, b) -> new DebtCust()
.setDeptId(a.getDeptId())
.setCustCode(a.getCustCode())
.setDebt(a.getDebt().add(b.getDebt()))
).ifPresent(newList::add);
});
System.out.println(newList);
}
tips:本方法仅适用大数据量统计(不适用于超大对象,例如list长度100w)
记录下看到的金句:买好的,不如买得好,买得好不如卖得巧。
所谓的价值投资,依然离不开择时,不得不承认择时是困难的,专业的芒格巴菲等智者也有失误的时候,所以,不轻易择时。
更多推荐
已为社区贡献1条内容
所有评论(0)