java - 将增强循环转换为 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;
解决方案
您可以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);
推荐阅读
- javascript - 如何处理多个复选框
- android - 使用 app:actionLayout 时,setOnMenuItemClickListener 不适用于底部应用栏
- python - 加载跟踪文件时如何修复“UnicodeDecodeError:'utf-8'”
- javascript - 通过php表单生成并发送word文档作为附件?
- ios - 从 archiveRootObject 迁移到 archivedData
- amazon-web-services - ECS任务定义中容器之间的通信
- vue.js - 如何从 v-data-table 中的 v-select 列中获取项目
- firebase - Firebase 存根事务
- javascript - 检查数组是否不为空 - XHR 响应测试
- java - 启动我的 Spring Boot 应用程序时找不到 byte-budy