单字段分组
Map<String,List<String>> collect = list.stream().collect(Collectors.groupingBy(HistroySearch::getLx))
多字段分组
List<PrintValueVO> printValueVOListAllDeal = new ArrayList<>();
Map<String, List<PrintValueVO>> groupMap = printValueVOListAll.stream().collect(Collectors.groupingBy(a -> a.getSupplierCommodityId() + "," + a.getLotNumber() + "," + a.getExpiryDate() + "," + a.getPrice()));
for(Map.Entry<String, List<PrintValueVO>> entry : groupMap.entrySet()){
PrintValueVO printValueVO = new PrintValueVO();
BeanUtils.copyProperties(entry.getValue().get(0), printValueVO);
BigDecimal baseValue = BigDecimal.ZERO;
BigDecimal inputValue = BigDecimal.ZERO;
BigDecimal amount = BigDecimal.ZERO;
for(PrintValueVO subDTO: entry.getValue()){
baseValue = baseValue.add(subDTO.getBaseNumber() != null ? subDTO.getBaseNumber(): BigDecimal.ZERO);
inputValue = inputValue.add(subDTO.getInputNumber() != null ? subDTO.getInputNumber(): BigDecimal.ZERO);
amount = amount.add(subDTO.getEachPrice() != null ? subDTO.getEachPrice(): BigDecimal.ZERO);
}
printValueVO.setBaseNumber(baseValue);
printValueVO.setInputNumber(inputValue);
printValueVO.setEachPrice(amount);
printValueVO.setAmount(amount);
printValueVOListAllDeal.add(printValueVO);
}
每组求最新
Java stream 处理分组后取最新时间的一组_Max-yang 的博客 - 优快云 博客
注意:
Stream的Collectors.groupingBy支持key为null_紫枫231的博客-优快云博客_collectors.groupingby key为空
public void groupBy(List<User> userList){
//使用option包装一层
Map<Option<String>, List<User>> userMap = userList.stream.collect(Collectors.groupingBy(x -> Optional.ofNullable(x.getSex())));
}