但是如果serviceworkList列表为空,则变量“validate”为false。我知道allMatch的规范,如果list为空,则返回为true。
有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?
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
。
我和我的同事有一个bug,这是由于我们假设调用的空流将返回。 当然,这是我们假设而不阅读文档的错误。但我不理解的是,为什么空流的默认行为返回。这样做的理由是什么?与(相反返回false)一样,该操作以命令方式使用,脱离单子,可能用于语句。考虑到这些事实,是否有任何理由让空流上的默认为对于大多数用途是可取的?
需要筛选一个项目列表并检查item.discount()<=0,以防没有找到返回可选对象类型。 这是一个为列表添加值的代码,但我不知道如果列表是空的,如何获得可选对象
问题内容: 我和我的同事有一个错误,这是由于我们假设会返回空流调用而导致的。 当然,假定和不阅读文档是我们的错。但是我不明白的是为什么空流的默认行为会返回。这是什么原因呢?像(相反地返回false)一样,此操作以命令式方式使用,它离开了monad,并且可能在语句中使用了。考虑到这些事实,是否有任何理由使大多数用途都需要默认为空流? 问题答案: 这就是所谓的虚无事实。空集合的所有成员都满足您的条件;
到目前为止,我得到了indexOutOfBoundsException错误
不确定我是否做错了什么,但使用此apihttps://www.firebase.com/docs/security/simple-login-email-password.html根据返回消息,我可以成功创建一个用户,但在Forge控制台的任何地方都看不到该用户。您如何知道注册了哪些用户? 我应该使用返回的用户ID并在Firebase中创建自己的用户对象,还是不需要进行此复制。我确实需要添加一些额
我有一个方法,它接受一个内部有的对象: MatchData k可以是null,有时k.getWatchListDetail()也可以是null。 我需要检查两种情况。首先,如果它能抛出NPE。 上面的实现可以做到这一点,但我尝试使用或带有链接的流,所以我可以在一行链接中完成。