是|| ('或')符号和Stream.of(..)。anyMatch(e-> e == true)在功能上等效吗? - java

以相同顺序应用于相同系列条件时,||Stream.of(..).anyMatch(e-> e==true)在功能上是否等效?

任务:对一系列条件进行快速测试,以确定是否符合条件。

可能的解决方案:
-用“或”符号(||)分隔每个条件
-将每个条件包括在Stream.of(..)语句中,该语句附加.anyMatch(e-> e==true)

anyMatch(..)的文档指出:“返回此流的任何元素是否与提供的谓词匹配。如果不一定要确定结果[强调],则可能无法对所有元素都评估谓词。”

根据此陈述,我的理解是,上面指出的两个解决方案在功能上是相同的,因此,如果严重程度为4的第二个元素是true的第一个元素,则不会评估元素3和4 。

但是,实际上,这似乎是不正确的。考虑以下情况,其中itemnullemptytrue,并且UtilMethods.isEmpty(..)是用于测试给定参数是null还是空的String(“”)的自定义库方法:

@Override
protected void updateItem(Pair<K, V> item, boolean empty) {
    super.updateItem(item, empty);

    boolean test1 = empty
             || Objects.isNull(item)
             || UtilMethods.isEmpty(item.toString())
             || Objects.isNull(item.getValue());

    boolean test2 = Stream.of(
        empty,
        isNull(item),
        UtilMethods.isEmpty(item.toString()),
        isNull(item.getValue()))
    .anyMatch(e -> e == true);
}

||代码按预期运行。但是,由于Stream.of(..).anyMatch(..)NullPointerException,当到达第三个元素时,item会引发null

鉴于上面引用的anyMatch(..)文档没有意义,这表明甚至不应该达到第三个元素。还是我在这里想念什么?

谢谢

参考方案

UtilMethods.isEmpty(item.toString())是在执行Stream.of()之前求值的,因此无论之后是否调用NullPointerException,它都会抛出anyMatch

就像任何方法调用一样,Stream.of()在执行之前先评估其所有参数,因此它必须对UtilMethods.isEmpty(item.toString())进行评估。

您可以在更简单的代码段中看到相同的行为:

String s = null;
Stream<Integer> stream = Stream.of (5,s.length());

因此,anyMatch的文档与您观察到的行为无关。

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

如何创建一种在Python中将事物添加到列表中的方法? - java

我的背景是Java,直到最近才学习如何在Java中进行一些面向对象的编程。我目前也在学习python,并且想知道此Java代码如何转换为python。假设我有一个HockeyPlayer类,该类具有jerseyNumber实例变量:public void addPlayer(HockeyPlayer h){ if(hockeyPlayers == null)…

正则表达式仅适用于字母字符-Java - java

抱歉,我是Regex的新手,但是到目前为止,我尝试使用的任何regex似乎都无法实现以下目标。我们对“单词”感兴趣(即,该单词是完全字母的,仅包含大写,小写或混合大小写的字母。所有其他内容都将被忽略)我尝试使用的示例字符串如下:要找到黄金票,您必须购买一条巧克力:)查理的格兰尼和格兰纳德希望他能得到一张票,但他只有足够的钱来购买1条巧克力。我打印了5张票,但…

为什么`if(guess!='a'|| guess!='A'||…)`不起作用? - java

Improve this question 这是我的代码,我知道if语句真的很长,代码可能会更高效,但是我只是想知道答案,因为它使我发疯。while (whileloop == 1) { if (guess != 'a' || guess != 'A' || guess != 'b' || gues…

输入URL字段时,出现错误“远程URL测试失败:不支持协议'git clone HTTPS'” - java

当我单击“定义远程”时,输入在Android Studio的Bitbucket站点中提供的HTTPS URL时,出现错误远程URL测试失败:不支持协议'git clone https'我使用了SSH URL,这给了我错误远程URL测试失败:警告:将IP地址“ 18.205.93.0”的RSA主机密钥永久添加到已知主机列表中。无法从远程存储库读取。我什至尝试从…