首页 > 解决方案 > 将增强循环转换为 Java 8 Streams,过滤器

问题描述

我正在尝试学习 Java 8。有没有办法将下面的方法变成 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;

标签: javajava-8java-stream

解决方案


您可以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);

推荐阅读