1、分组
对实体类得某个字段分组
Map<String, List<KjEntryHeadDeclare>> collect = kjEntryHeadDeclares.stream().collect(Collectors.groupingBy(KjEntryHeadDeclare::getTotalPackageNo));
//先分组,再累加,得到Map
Map<String, BigDecimal> decimalMap = nearlyDayByTenantId.stream()
.collect(Collectors.groupingBy(KjOrderBody::getGname,
Collectors.reducing(BigDecimal.ZERO, KjOrderBody::getQty, BigDecimal::add)));
//对Map进行遍历排序取前五。默认降序排序
LinkedHashMap<String, BigDecimal> collect = decimalMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.limit(5)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> oldValue, LinkedHashMap::new));
2、求和
对实体类某个字段进行累加
1.BigDecimal类型
BigDecimal totalPrice = nearlyDayByTenantId.stream()
.map(KjOrderBody::getQty)
.reduce(BigDecimal.ZERO, BigDecimal::add);
2.普通
int sumOfAges = personList.stream()
.mapToInt(Person::getAge) // 通过mapToInt方法将流中的Person对象映射为其age字段的整数流
.sum(); // 使用sum方法对整数流进行求和