predicate
英 [ˈpredɪkət] 美 ['predɪkət]vt.
断言,断定;宣布,宣讲;使基于
vi.
断言,断定
n.
谓语;述语
adj.
谓语的;述语的
上述可以看到,predicate是谓语的意思,在接口中,可以用作判断使用;我们先看接口的定义
@FunctionalInterface public interface Predicate<T> { boolean test(T t); default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) && other.test(t); } default Predicate<T> negate() { return (t) -> !test(t); } default Predicate<T> or(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) || other.test(t); } static <T> Predicate<T> isEqual(Object targetRef) { return (null == targetRef) ? Objects::isNull : object -> targetRef.equals(object); } }
接口中包含有一个抽象方法,3个默认方法以及一个静态方法
我们先来看抽象方法test()的使用;
public static void main(String[] args) { // 数字类型 判断值是否大于5 Predicate<Integer> predicate = x -> x > 5; System.out.println(predicate.test(10));//true // 字符串的非空判断 Predicate<String> predicateStr = x -> null == x && "".equals(x); System.out.println(predicateStr.test(""));//false }
接下来,我们再看下默认方法的一些使用
/** * 这个默认方法,看代码就知道,判断条件的连接 与操作 * @param other * @return */ default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) && other.test(t); } /** * 这个方法,表示取非操作 * @return */ default Predicate<T> negate() { return (t) -> !test(t); } /** * 或操作 * @param other * @return */ default Predicate<T> or(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) || other.test(t); } /** * 比较 * @param targetRef * @return */ static <T> Predicate<T> isEqual(Object targetRef) { return (null == targetRef) ? Objects::isNull : object -> targetRef.equals(object); }我就不在每个写测试代码,看代码的字面意义,以及代码的写法,就很清楚这些默认方法以及静态方法的用法了