1,多条件分组;对list中的实体的多个属性进行分组;需要注意的是:集合的对象元素需要重写hashCode和equals,才会起作用,并且提供一个有参构造;
Map<B2BSettlement, List<B2BSettlement>> b2BSettlementListMap = b2bSettlementDTOs.stream().collect(groupingBy((b2bSettlement->
new B2BSettlement(b2bSettlement.getServiceSellerId(),b2bSettlement.getServiceBuyerId(),b2bSettlement.get))));
另一种写法:
HashMap<B2BSettlement, List<B2BSettlement>> map = b2bSettlementDTOs.stream() .collect(groupingBy(b -> new B2BSettlement(b.getServiceSellerId(), b.getServiceBuyerId(), b.getServiceTypeId(), b.getFirstCategoryId(), b.getTaxRate(), b.getState(), b.getSettlementRules()), HashMap::new, toList()));
一个属性的分组:
Map<BigDecimal, List<B2BSettlement>> b2BSettlementListMap
= b2bSettlementDTOs.stream().collect(groupingBy(B2BSettlement::getTaxRate));
2,对集合中的某个金额进行加总;
BigDecimal amount = combatTeamEntities.stream().map(CombatTeamEntity::getActivityAmountOne).reduce(BigDecimal::add).get();
3,对一个map的key,value进行操作;
b2bSettlementDTOs = b2BSettlementListMap.entrySet().stream().map(e -> { BigDecimal taxRate = e.getKey(); List<B2BSettlement> settlements = e.getValue(); return this.createNewSettlement(params.getSettlementRules(), taxRate, settlements); }).collect(Collectors.toList());
4,集合中最大日期,最小日期
最大日期 Date maxDate = settlements.stream().filter(Objects::nonNull) .max(Comparator.comparing(B2BSettlement::getConfirmDate)).get().getConfirmDate(); 最小日期 Date minDate = settlements.stream().filter(Objects::nonNull) .min(Comparator.comparing(B2BSettlement::getConfirmDate)).get().getConfirmDate();
5,bigdecimal大于0
settlementObj.getSettlementAmount().compareTo(BigDecimal.ZERO)