boolean anyMatch(Predicate<? super T> predicate)
很容易理解,即是有一个或一个以上的元素满足函数参数计算结果为true那整个方法返回值为true。
看例子:
void stream_anyMatch() {
List<Integer> list = List.of(2,5,8,9,4,20,11,43,55);
boolean bo = list.stream().anyMatch(a -> a>11);
System.out.println(bo);
boolean bo2 = list.stream().anyMatch(a -> a>110);
System.out.println(bo2);
}
运行结果:
true
false
第一个anyMatch,集合中有两个元素大于11,因此整个函数返回结果就是true。
第二个anyMatch,集合中全部元素都不满足大于110这个要求,因此返回结果为false。
这个方法是要给短路操作,即不用遍历流中所有元素就可以得到最终返回结果。下面例子中我们使用peek方法现在流中绑定打印操作,绑定后只要后续的anyMatch方法使用(官方翻译为消费)了该流中的元素就会打印该元素,从而达到监控anyMatch运行路径。看代码:
boolean boo = Stream.of(2,5,8,9,4,20,11,43,55).peek(System.out::println).anyMatch(a -> a>5);
System.out.println("\n"+boo);
运行结果:
2
5
8
true
最终返回结果为true这个没有什么好讲的,这个anyMatch方法判断条件为元素值大于5,我们按顺序看原流中的元素,第一个为2,不大于5,因为使用了该元素传入predicate函数中进行计算,因此触发了peek方法打印2,继续向下执行,第二个元素为5也不大于5,同样打印5,再继续向下执行,第三个为8,大于5,因为8也使用了因此也打印8,但是8满足大于5的条件,因此中断操作,返回最终结果true。所以看到的就是上面运行结果。
本文详细解析了Java Stream API中的anyMatch方法的工作原理及应用场景,通过具体实例展示了如何利用该方法来检查流中是否存在满足特定条件的元素。
796

被折叠的 条评论
为什么被折叠?



