当前位置: 首页 > 知识库问答 >
问题:

如果使用Stream.AllMatch(),如何为空列表返回false?

楚天宇
2023-03-14

但是如果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
}

共有1个答案

严开宇
2023-03-14

只需添加一个列表不为空的附加检查:

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。 上面的实现可以做到这一点,但我尝试使用或带有链接的流,所以我可以在一行链接中完成。