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)