stream的anyMatch、allMatch、noneMatch的坑点

正常逻辑是这样
anyMatch:流中有任意一个元素匹配上结果为true,都不匹配则为false
allMatch:流中所有元素都匹配结果为true,否则如果有一个不匹配就为false
noneMatch:流中所有元素都不匹配结果为true,否则,有一个匹配就为false

但是如果list的size为0,那么上面的方法就容易用错。接口注释

stream的anyMatch、allMatch、noneMatch的坑点

主要是 allMatch 和 noneMatch 的API Note中的If the stream is empty, the quantification is said to be vacuously satisfied and is always true
就是说,如果stream流是空的,那么调用这个方法的时候结果总是true

下面的测试方法,谓词是判断list里是否有字符串a ,但是list是空的,正常来说,anyMatch方法的返回结果应当是false,allMatch方法返回结果是false,noneMatch方法返回结果是true,但是allMatch方法返回结果是true。

stream的anyMatch、allMatch、noneMatch的坑点

这个坑点如果用在逻辑判断是非常危险的,因为我们平时使用stream时都会先filter符合条件的数据,如果filter之后list为空,而此时恰好又用allMatch方法进行业务逻辑判断就会出现

Original: https://blog.csdn.net/weixin_47287832/article/details/127820029
Author: Java精灵儿
Title: stream的anyMatch、allMatch、noneMatch的坑点

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/657098/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球