我已经开始使用 Java 8 并尝试将一些流转换为增强循环。
因此,例如,我正在尝试将此流转换为 for 循环。但是,我没有做对:
List<Job> jobs = shipment.getJobs();
Job shoppingJob = jobs.stream().filter(job -> job.isShopping()).findFirst().orElse(null);
Job deliveryJob = jobs.stream().filter(job -> job.isDelivery() || job.isRanger()).findFirst().orElse(null);
我想知道是否可以将上面的示例转换为增强的 for 循环。到目前为止,我尝试像这样转换我的 for 循环代码:
List<Job> jobs = shipment.getJobs();
Job shopping job = null;
Job delivery job = null;
Job rangerJob = null;
if(jobs != null || jobs.isEmpty()) {
for (Job job: jobs) {
if (job.isShopping()) {
shoppingJob = job;
} else {
if (job.isDelivery()) {
deliveryJob = job;
}
}
}
}
最佳答案
findFirst
的要点是 Stream
管道只会评估 Stream
的元素,直到它找到第一个匹配的元素(通过你的过滤器)。
当您将其转换为 for 循环时,您应该在找到匹配项后退出循环。但是,由于您正在将两个 Stream
管道转换为一个 for 循环,因此您应该只在找到两个条件都匹配后才从循环中中断。
List<Job> jobs = shipment.getJobs();
Job shoppingJob = null;
Job deliveryJob = null;
if (jobs != null) {
for (Job job : jobs) {
if (shoppingJob == null && job.isShopping()) { // this is the first shopping job
shoppingJob = job;
if (deliveryJob != null) { // we can break after finding a match for both conditions
break;
}
}
if (deliveryJob == null && (job.isDelivery() || job.isRanger())) { // this is the first delivery or range job
deliveryJob = job;
if (shoppingJob != null) { // we can break after finding a match for both conditions
break;
}
}
}
}
关于java - 如何将流转换为增强循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52492216/