【发布时间】:2019-03-15 21:21:39
【问题描述】:
我想对 Java 流使用一个语句。
我想过滤所有要求为“真”的服务工作对象,然后检查所有服务工作对象的状态是否为“完成”。
但如果 serviceworkList 为空,则变量“validate”为 false。 我知道 allMatch 的规范,如果列表为空,则返回为真。
关于如何重建流的任何建议,如果列表为空,我会得到错误?
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
}
【问题讨论】:
-
您的意思是“如果
serviceWorkList为空”还是“如果没有与谓词ServiceWork::isRequirement匹配的元素”? -
@Holger:我的意思是如果没有与谓词匹配的元素
-
serviceWorkList .stream() .filter(ServiceWork::isRequirement) .map(a -> a.getStatus() == Status.DONE) .reduce(Boolean::logicalAnd) .orElse(false); -
看起来像 stackoverflow.com/questions/46075776 的副本
标签: java java-stream