java - 如何将流转换为增强循环

标签 java java-8

我已经开始使用 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/

相关文章:

java - 如何定期重复异步任务?

java - 无法在 Visual Studio Code 中运行 java 代码

java - 使用 Java8 生成器的无限自然数序列

java - Jmockit:模拟返回接口(interface)上的方法(Mockito spy ()等效)

java - 正则表达式匹配特定单词并忽略特定单词

java - 以函数式方式重构 RxJava Observable concat 代码和错误处理

lambda - Java流: transform user input to batches

java - 使用 Stream API 创建 Map<String, List<Object>> ,其中对列表的元素进行排序

java - 如何在 Ant 脚本中检查 Ant 版本

java - 旋转 Canvas 和绘制位图性能