我想对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)
只需添加其他检查,以确保列表不为空:
boolean validate = !serviceWorkList.isEmpty() && serviceWorkList
.stream()
.filter(ServiceWork::isRequirement)
.allMatch(a -> a.getStatus() == Status.DONE);
Run Code Online (Sandbox Code Playgroud)
发表评论后,您可以使用以下命令:
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();
Run Code Online (Sandbox Code Playgroud)
它首先将所有状态收集到中EnumSet,然后Status.DONE从集合中删除,如果集合为空,则每个元素都具有getStatus() == Status.DONE。
但是,这消除了短路,因此serviceWorkerList即使遇到了Status其他情况,它仍然会迭代。Status.DONE
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |