当 allMatch、anyMatch 和 noneMatch 作用于空列表时,
方法 | 返回值 | 解释 |
---|---|---|
allMatch | true |
因为对于没有元素的列表,相当于所有元素都满足某个条件(即所有元素都不存在),因此返回 true ; |
anyMatch | false |
因为对于没有元素的列表,相当于不存在任何元素满足某个条件,因此返回 false ; |
noneMatch | true |
因为对于没有元素的列表,不存在任何元素满足某个条件,相当于所有元素都不满足某个条件,因此返回 true 。 |
其中, allMatch的返回值不符合日常思维表达, 当列表为空即不存在任何元素时, 应该返回false才符合日常的思维逻辑, 因此需要加个不为空的条件, 如:
List<String> list = List.of();
boolean rightMatch = ObjectUtil.notNull(list) && list.stream().allMatch(item -> item.equals("雨中山果落,灯下草虫鸣。"));
最好是抽成公共方法:
public static <T> boolean allMatch(Collection<T> values, Predicate<T> condition){
return CollectionUtils.isNotEmpty(values) && values.stream().allMatch(condition);
}
网友评论