lambda 表达式 分组 ,多字段求和

1. 
public class PayDetailToBabModel implements Serializable {
    private static final long serialVersionUID = -5197016274254913057L;
    private String productCode;
    private String productName;
    private Long money;
    private BigDecimal amount;
    private BigDecimal price;
    private Integer cityId;

    public String getProductCode() {
        return productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public Long getMoney() {
        return money;
    }

    public void setMoney(Long money) {
        this.money = money;
    }

    public BigDecimal getAmount() {
        return amount;
    }

    public void setAmount(BigDecimal amount) {
        this.amount = amount;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getCityId() {
        return cityId;
    }

    public void setCityId(Integer cityId) {
        this.cityId = cityId;
    }

    public String getCodeAndCityId() {
        if (money >= 0) {
            return  productCode+"_"+cityId;
        } else {
            return  "2"+productCode+"_"+cityId;
        }
    }
}


2. 

public List<PayDetailToBabModel> getPayDetail(PayDetailToBabQuery model) {
    List<PayDetailToBabModel> payDetail = payDetailMapper.getPayDetail(model);
    // 分组
    Map<String, List<PayDetailToBabModel>> collect = payDetail.stream().collect(Collectors.groupingBy(PayDetailToBabModel::getCodeAndCityId));

    List<PayDetailToBabModel> results = collect.values().stream().map((List<PayDetailToBabModel> details) ->{
        Long totalMoney = 0L;
        BigDecimal totalAmount = new BigDecimal(0);
        for (PayDetailToBabModel detail : details) {
            totalMoney += detail.getMoney();
            totalAmount = totalAmount.add(detail.getAmount());
        }
        BigDecimal price = null;
        if (totalAmount.equals(new BigDecimal(0))) {
            price = new BigDecimal(totalMoney);
            totalAmount = new BigDecimal(1);
        } else {
            price = new BigDecimal(totalMoney).divide(new BigDecimal(100),6).divide(totalAmount,6);
        }
        PayDetailToBabModel babModel = new PayDetailToBabModel();
        babModel.setMoney(totalMoney);
        babModel.setAmount(totalAmount);
        babModel.setPrice(price);
        babModel.setProductName(details.get(0).getProductName());
        babModel.setProductCode(details.get(0).getProductCode());
        return babModel;
    }).collect(Collectors.toList());
    return  results;
}

猜你喜欢

转载自blog.csdn.net/xu990128638/article/details/81211665