在 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/