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

为什么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。 有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?

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

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

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

  • 我有一个Spring Boot应用程序连接到本地mongoDB数据库。当我试图从集合中获取所有记录时,它返回一个空数组。在输出中,它表示已连接到端口27017。它在运行应用程序时不会给我任何错误,但在我键入时只返回一个空数组http://localhost:8080/courses/我错过了什么? 模范班 控制器类 存储库类 MongoDb输出