gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:15:21 32 4
gpt4 key购买 nike

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

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

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

关于如何重建流的任何建议,如果列表为空,我会得到 false ?

public class Service{

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


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

}

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;
}
}

enum Status {
DONE, NOT_DONE
}

最佳答案

只需添加额外的检查以确保列表不为空:

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

发表评论后,您可以使用以下内容:

Set<Status> status = serviceWorkList
.stream()
.filter(ServiceWork::isRequirement)
.map(ServiceWork::getStatus())
.collect(Collectors.toCollection(() -> EnumSet.noneOf(Status.class)));

boolean validate = status.remove(Status.DONE) == Status.DONE && status.isEmpty();

它首先将所有状态收集到 EnumSet 中,然后从集合中删除 Status.DONE,如果集合为空,则每个元素都有 getStatus( ) == Status.DONE.

这消除了短路,因此即使 Status.DONE 之外的 Status 已经被调用,它仍然会迭代 serviceWorkerList遇到过

关于java - 如果使用 Stream.allMatch() 如何为空列表返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55181858/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com