java8 分组(groupingBy)

//查询需要出库数量
Map<String, BigDecimal> collectList = list.stream().collect(Collectors.groupingBy(o -> {
    return String.format("%s_%s_%s", o.getProductId(), o.getRepertoryId(), o.getUnitId());
}, CollectorsUtil.summingBigDecimal(StoreItemEntity::getUnitNums)));

//验证数量是否够
for (String groupKey : collectList.keySet()) {
    List<StoreRecordsEntity> storeRecordsEntities = recordsEntities.stream().filter(q -> ValidatorUtils.isGreaterEquals(q.getCurrentNums()) && groupKey.equals(String.format("%s_%s_%s", q.getProductId(), q.getRepertoryId(), q.getUnitId()))).collect(toList());
    if (storeRecordsEntities.size() == 0) {
        throw new RRException(String.format("%s库存不足", storeRecordsEntities.get(0).getProductName()));
    }
    BigDecimal currentNums = storeRecordsEntities.stream()
        .collect(CollectorsUtil.summingBigDecimal(StoreRecordsEntity::getCurrentNums));
    //相等或超出表示有库存
    if (currentNums.compareTo(collectList.get(groupKey)) < 0) {
        throw new RRException(String.format("%s库存不足", storeRecordsEntities.get(0).getProductName()));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43722564/article/details/92803129
今日推荐