java8 分组取最大值_java stream 实现list分组求和后并取最大值

public static void main(String[] args) {

//java stream 实现list分组求和后并取最大值

List list = new ArrayList<>();

list.add(new HitRuleConfig("1", "1", new BigDecimal(1), 1));

list.add(new HitRuleConfig("1", "1", new BigDecimal(1), 2));

list.add(new HitRuleConfig("2", "2", new BigDecimal(1), 3));

list.add(new HitRuleConfig("2", "2", new BigDecimal(1), 4));

list.add(new HitRuleConfig("1", "1", new BigDecimal(1), 5));

list.add(new HitRuleConfig("3", "3", new BigDecimal(1), 6));

list.add(new HitRuleConfig("3", "3", new BigDecimal(1), 7));

Map configMap = list.parallelStream().filter(Objects::nonNull).

collect(Collectors.groupingBy(a -> a.getAppId() + a.getTest(),

Collectors.collectingAndThen(Collectors.reducing((c1, c2) -> (c1.getVersionSort() > c2.getVersionSort()) ? c1 : c2), Optional::get)));

List list2 = new ArrayList<>();

configMap.forEach((k, v) -> {

list2.add(v);

});

List list3 = new ArrayList<>();

for (HitRuleConfig f : list2) {

List collect = list.stream().filter(a -> a.getAppId().equals(f.getAppId()) && a.getTest().equals(f.getTest())).collect(Collectors.toList());

BigDecimal reduce = collect.stream().map(HitRuleConfig::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);

f.setAmount(reduce);

list3.add(f);

}

System.out.println(list3);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值