当前位置: 首页 > 面试题库 >

为什么Stream.allMatch()对于空流返回true?

雍骏俊
2023-03-14
问题内容

我和我的同事有一个错误,这是由于我们假设allMatch()会返回空流调用而导致的false

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

当然,假定和不阅读文档是我们的错。但是我不明白的是为什么allMatch()空流的默认行为会返回true。这是什么原因呢?像anyMatch()(相反地返回false)一样,此操作以命令式方式使用,它离开了monad,并且可能在if语句中使用了。考虑到这些事实,是否有任何理由使大多数用途都需要allMatch()默认为true空流?


问题答案:

这就是所谓的虚无事实。空集合的所有成员都满足您的条件;毕竟,您能指出一个没有的吗?

同样,anyMatch返回false,因为找不到匹配条件的集合中的元素。这使很多人感到困惑,但是事实证明,这是为空集定义“任何”和“全部”的最有用和一致的方法。



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

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

  • 输出为 为什么第一行返回true,而第二行返回false?这里有什么诀窍,因为两者都在类上调用。

  • 首先,我收到来自post string属性和来自控制器的inputStream。 接下来,我的服务调用ParseGeojosnStream以流式传输文件的内容。 接下来,传递特性的名称和列表,并将其插入表中。 最后,使用字符串属性和表名作为id创建scheme。 那么,当强制转换为json并将其存储在数据库中时,为什么要返回一个空的属性对象呢? 代码如下: log.info(“jsonGeomet

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

  • 问题内容: 我知道这有充分的理由,但我想知道是什么原因? 如果all()用于检查iterable上的每个项目是否均评估为“ True”,并且我们知道空列表的评估结果为False 那么,为什么all()对于空列表返回True? <编辑> 我已经阅读了文档,并且知道实现 但是问题是为什么不呢? 这有逻辑吗?如果您有已完成任务的列表 好的,在上面的 假设 示例中,如果我没有任务,那真的很有意义,所以我可