List<Integer> prizeIds = fissionGetLogs.stream()
.map(FissionGetLogEntity::getPrizeId)
.collect(Collectors.toList());
// 获取奖品中的优惠券id
List<String> couponsList = prizeIds.stream().map(prizeId -> {
FissionPrizeEntity fissionPrize = fissionPrizeService
.findOne(prizeId);
return fissionPrize.getCouponIds();
}).collect(Collectors.toList());
// 将奖品中的优惠券id转为integer类型
List<Integer> couponIds = couponsList.stream().flatMap(
prizeCoupons -> Arrays.asList(prizeCoupons.split(",")).stream())
.map(Integer::valueOf).collect(Collectors.toList());
// 聚合为: <优惠券, 领取数>
Map<Integer, Long> couponGetCount = couponItems.stream()
.collect(Collectors.groupingBy(CouponItemEntity::getCouponId,
Collectors.counting()));
return coupons.stream()
// 判断用户领取的当前优惠券,是否达到了领取上限。
// 如果已达到,从集合中过滤掉该优惠券。
.filter(coupon -> {
Long count = couponGetCount.getOrDefault(coupon.getId(), 0L);
return count.intValue() < coupon.getGetLimit();
})
.collect(Collectors.toList());