我正在尝试学习Java8。是否可以将下面的方法转换为Java 8 Streams,filter和forEach。如果是这样,怎么办?
String[] couponList = coupons.split(",");
for(String coupon:couponList) {
singleCouponUsageCount = getSingleCouponUsageCount(coupon);
if(singleCouponUsageCount >= totalUsageCount)
return 0;
}
return 1;
//
for(String coupon:couponList) {
singleCouponUsageCount = getSingleCouponUsageCount(coupon);
if(singleCouponUsageCount >= totalUsageCount)
return singleCouponUsageCount;
}
return singleCouponUsageCount;
最佳答案
您可以在数组元素上Stream
,将它们映射到其使用计数,并使用anyMatch
来确定是否有任何使用计数符合应导致返回0的条件:
return Arrays.stream(coupons.split(","))
.map(coupon -> getSingleCouponUsageCount(coupon))
.anyMatch(count -> count >= totalUsageCount) ? 0 : 1;
编辑:
对于第二个代码段,如果要返回与条件匹配的第一个计数,则可以编写:
return Arrays.stream(coupons.split(","))
.map(coupon -> getSingleCouponUsageCount(coupon))
.filter(count -> count >= totalUsageCount)
.findFirst()
.orElse(someDefaultValue);