java8 allMatch,anyMatch,noneMatc
2023-07-25 本文已影响0人
饱饱抓住了灵感
当 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);
}