//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);
标签:
Java
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明,KuangStudy,以学为伴,一生相伴!
本文链接:https://www.kuangstudy.com/bbs/1356588925149356034