正常逻辑是这样
anyMatch:流中有任意一个元素匹配上结果为true,都不匹配则为false
allMatch:流中所有元素都匹配结果为true,否则如果有一个不匹配就为false
noneMatch:流中所有元素都不匹配结果为true,否则,有一个匹配就为false
但是如果list的size为0,那么上面的方法就容易用错。接口注释
主要是 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时都会先filter符合条件的数据,如果filter之后list为空,而此时恰好又用allMatch方法进行业务逻辑判断就会出现