- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 allmatch
的情况下,我想找出哪个元素使谓词失败。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean isEven = numbers.stream().allMatch(n-> n % 2 == 0);
此处 isEven
为 false
,因为元素 1
未通过谓词。
我可以在流上使用 forEach
来查找哪个元素失败,例如:
numbers.stream().forEach(n -> {
if (n % 2 != 0)
System.out.println(n + "is Odd");
});
有没有办法在 allmatch
返回 false
时找出哪些元素不符合谓词?
最佳答案
请记住,allMatch
是一个短路操作,这意味着流 API 可能会在没有找到所有未通过测试的元素的情况下返回 false。
因此,如果您想找到所有 失败的元素,您可能需要做比简单的allMatch
(如其他答案所示)更多的工作。但是,如果您只想找到一个未通过测试的元素,请按如下方式使用 findAny
:
Optional<Integer> odd = numbers.stream()
.filter(n -> n % 2 != 0)
.findAny();
boolean isEven = !odd.isPresent();
odd.ifPresent(x -> System.out.println(x + " is odd"));
关于java - 查找流中的哪个元素与 allmatch 中的给定谓词不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44428715/
我有几个 predicates我都想得到满足。 能满足那些谓词的东西是少数字符串。单个字符串不必满足所有(或任何)这些谓词,但在我查看最后一个字符串后,所有谓词都必须满足。 我用 Java 表示这个问
在 allmatch 的情况下,我想找出哪个元素使谓词失败。 List numbers = Arrays.asList(1, 2, 3, 4, 5); boolean isEven = numbers
令我困扰的是(出于性能原因),如果不先创建流,我就无法在列表上调用 allMatch、anyMatch。所以我开始创建这样的实用方法: public static boolean anyMatch(
我想对 Java 流使用一条语句。 我想过滤所有要求为“true”的 Servicework 对象,然后检查所有 Servicework 对象的状态是否为“完成”。 但是如果 serviceworkL
我有以下流代码: List results = items.stream() .map(item -> requestDataForItem(item)) .filter(data ->
我有 X509 证书。我正在尝试从中提取所有 SAN。之后,我想确保 SAN 的类型为 dNSName - 即列表中的第一个条目应该是值为 2 的整数。引用- https://docs.oracle.
我想要以下逻辑:(我知道它不起作用,因为它不止一次消耗流)。但我不确定如何实现它。 Stream buffers = super.getBuffers().stream(); if (buffers.
int testValue; boolean success = false; while(success == false) { testValue = generateRandomInt();
我的同事和我遇到了一个错误,这是由于我们假设调用 allMatch() 的空流将返回 false。 if (myItems.allMatch(i -> i.isValid()) { //do
我想使用以 allMatch 终端操作结束的单个流链获得一个 false 值。 但是,我发现由于allMatch操作的设计,它在处理空流时会返回true。 例如,以下代码返回 true,因为过滤后的流
这个问题已经有答案了: Why does Stream.allMatch() return true for an empty stream? (6 个回答) 已关闭 4 年前。 每Java SE 8
我在另一篇文章中读到,经过调查发现 anyMatch 终端操作的工作方式是每个线程(在子流上操作)定期检查其他线程是否已找到结果,如果是,则所有其他线程都是停止了。 我假设,但想知道是否有人可以验证
考虑这个片段 - String a = "hello" , b = null, c = "guru"; boolean value = Stream .of(a, b, b.substrin
我是一名优秀的程序员,十分优秀!