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

为什么Stream.AllMatch()为空流返回true?

石博艺
2023-03-14

我和我的同事有一个bug,这是由于我们假设调用allmatch()的空流将返回false

if (myItems.allMatch(i -> i.isValid()) { 
    //do something
}

当然,这是我们假设而不阅读文档的错误。但我不理解的是,为什么空流的默认allmatch()行为返回true。这样做的理由是什么?与anymatch()(相反返回false)一样,该操作以命令方式使用,脱离单子,可能用于if语句。考虑到这些事实,是否有任何理由让空流上的allmatch()默认为true对于大多数用途是可取的?

共有1个答案

汪才
2023-03-14

这被称为空洞的真理。空集合的所有成员都满足您的条件;毕竟,你能指出一个没有的吗?

类似地,anymatch返回false,因为您找不到集合中与条件匹配的元素。这对很多人来说是混淆的,但事实证明它是定义空集的“any”和“all”的最有用和最一致的方法。

 类似资料:
  • 问题内容: 我和我的同事有一个错误,这是由于我们假设会返回空流调用而导致的。 当然,假定和不阅读文档是我们的错。但是我不明白的是为什么空流的默认行为会返回。这是什么原因呢?像(相反地返回false)一样,此操作以命令式方式使用,它离开了monad,并且可能在语句中使用了。考虑到这些事实,是否有任何理由使大多数用途都需要默认为空流? 问题答案: 这就是所谓的虚无事实。空集合的所有成员都满足您的条件;

  • 但是如果serviceworkList列表为空,则变量“validate”为false。我知道allMatch的规范,如果list为空,则返回为true。 有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?

  • 通过下面的代码片段,我试图运行一个查询,该查询更新数据或将新数据插入名为的表中。该表包含一个名为和的列。如果中已经有一个节点,则更新中以毫秒为单位的时间。否则,将插入新的信息。 问题是,下面的代码片段无法将数据插入到数据库的表中。原因是声明: 那么应该如何编辑代码,以便更新重复值并插入新值呢?

  • 我试图在流量为空时返回404,类似于这里:WebFlux Functional:如何检测空流量并返回404? 我主要担心的是,当你检查通量是否有元素时,它会发出那个值,而你却松开了它。当我尝试使用switch时,如果服务器响应为空,它就永远不会被调用(我暗暗认为这是因为单声道不是空的,只有主体是空的)。 是否有一种方法可以恢复hasElements中发出的元素,或者让switchIfEmpty只检

  • 问题内容: 我有这段代码,可以从请求输入流中读取输入,并使用JacksonMapper转换为POJO。它在带有guice支持的码头7集装箱中运行。 但是,有时在负载下会引发以下异常。我已经检查了我的客户端,并且确定它发送了一个有效的json字符串。怎么了?负载下Jetty 7的预期行为吗? 问题答案: 如果它已经被预先消耗,它将为空。这将隐式进行,每当你打电话,,,,等上。确保不要调用任何一种方法

  • 我有点困惑php函数布尔瓦尔是如何工作的。考虑以下几点