作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想对 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/
我是一名优秀的程序员,十分优秀!