前言
本文章帮助大家对Predicate
接口的理解。
一、概述
Predicate
意为断言。顾名思义,它对传入参数进行判断。
它是一个函数式接口,它可作为一个单个参数的有结果lambda表达式的接口类型。
二、源码理解
包
package java.util.function;
import java.util.function.Predicate;
使用Predicate
接口时,需引入此包。
Predicate接口
public interface Predicate<T> { /*...*/ }
使用接口时传入泛型T
。T
为函数式的参数类型,表示要判断的参数的类型。
Predicate方法
test
boolean test(T t);
判断参数t
是否符合此断言,即提供函数逻辑。通常可以这样使用:
LinkedList<String> list = new LinkedList<>(List.of("a", "b", "c"));
list.removeIf(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.equals("a");
}
});
以下为精简写法:
LinkedList<String> list = new LinkedList<>(List.of("a", "b", "c"));
list.removeIf(s -> s.equals("a"));
例子中list
值为“[b, c]”。参考Collection
接口的default boolean removeIf(Predicate<? super E> filter)
方法。
and
default Predicate<T> and(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) && other.test(t);
}
组合此断言和other
断言的函数逻辑,即返回的断言返回两断言结果的且值。若other
为空,则抛出NullPointerException
异常,参考Objects.requireNonNull
方法。default
关键字给出默认实现。
注意:若此断言返回false
,则other
断言不执行。若此断言出现异常,则other
断言不执行。若返回断言中出现异常,那么这些异常会交给返回断言的调用方处理。
or
default Predicate<T> or(Predicate<? super T> other) {
Objects.requireNonNull(other);
return (t) -> test(t) || other.test(t);
}
组合此断言和other
断言的函数逻辑,即返回的断言返回两断言结果的或值。类似and
方法,不同的是若此断言返回true
,则other
断言不执行。default
关键字给出默认实现。
negate
default Predicate<T> negate() { return (t) -> !test(t); }
返回的断言返回此断言的非值。default
关键字给出默认实现。
not
static <T> Predicate<T> not(Predicate<? super T> target) {
Objects.requireNonNull(target);
return (Predicate<T>)target.negate();
}
静态方法,传入泛型T
,为参数断言判断值及返回断言判断值的类型。返回的断言返回target
断言的非值。若target
为空,则抛出NullPointerException
异常。
isEqual
static <T> Predicate<T> isEqual(Object targetRef) { /*...*/ }
静态方法,传入泛型T
,为返回断言判断值的类型。返回判断“或空”对象与targetRef
是否相等的断言。
总结
新人源码理解,望大家多多指点。