相关疑难解决方法(0)

Java 8流短路

在Java 8上读了一下,我得到了这篇博文,解释了一些关于流和减少它们的内容,以及什么时候可以缩短缩减.在底部它表明:

注意在findFirst或者findAny我们只需要与谓词匹配的第一个值(虽然findAny不能保证返回第一个).但是如果流没有排序,那么我们期望findFirst表现得像findAny.的操作allMatch,noneMatchanyMatch可能不短路流,因为在所有可能需要评估所有的值,以确定操作者是否是truefalse.因此,使用这些的无限流可能不会终止.

我得到了这个findFirst或者findAny可能会缩短减少量,因为一旦你找到了一个元素,你就不需要再进一步处理了.

但为什么这不可能allMatch,noneMatch并且anyMatch?因为allMatch,如果找到与谓词不匹配的一个,则可以停止处理.同样没有.而且anyMatch尤其是没有道理给我,因为它几乎等于findAny(除了返回什么)?

说这三个可能不会短路,因为它可能需要评估所有的值,也可以说findFirst/Any.

我缺少一些根本区别吗?我真的不明白发生了什么事吗?

java short-circuiting java-8 java-stream

18
推荐指数
3
解决办法
7748
查看次数

如果使用Stream.allMatch(),如何为空列表返回false?

我想对Java流使用一条语句。

我要筛选所有要求为“ true”的Servicework对象,然后检查所有Servicework对象的状态是否为“完成”。

但是,如果serviceworkList ist为空,则变量“ validate”为false。我知道allMatch的规范,即如果list为空,则返回true。

关于如何重建流的任何建议,如果list ist为空,我将得到false?

public class Service{

    List<ServiceWork> serviceWorkList = new ArrayList<>();


    boolean validate = serviceWorkList
        .stream()
        .filter(ServiceWork::isRequirement)
        .allMatch(a -> a.getStatus() == Status.DONE);

}
Run Code Online (Sandbox Code Playgroud)

class ServiceWork {

    private Status status;
    private boolean isRequirement;

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public boolean isRequirement() {
        return isRequirement;
    }

    public void setRequirement(boolean requirement) {
        isRequirement = requirement;
    }
}
Run Code Online (Sandbox Code Playgroud)

enum Status {
    DONE, NOT_DONE
}
Run Code Online (Sandbox Code Playgroud)

java java-stream

2
推荐指数
1
解决办法
498
查看次数

标签 统计

java ×2

java-stream ×2

java-8 ×1

short-circuiting ×1