Java8之Predicate

函数式接口-----Predicate

之前的一篇文章,我分析了函数式接口------Function,现在我们继续分析第二个函数式接口------Predicate。这是一个断言式的函数式接口,返回的是一个boolean值,用于进行判断行为与参数是否相符。Java8Stream中的filter使用的就是此函数式接口。
下面我将分别列举出它所包含的方法和使用例子。

第一个方法 ------- test

源码:

// 用来判断传过来的参数是否符合规则
boolean test(T t);

示例代码:

// 将行为传进去,判断参数是否符合行为。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Predicate<String> predicate = p -> p.length() > 5;
System.out.println(predicate.test("hello"));
第二个方法 -------- and(默认方法)

源码:

// 通过代码分析,可以看出,and方法进行的是与操作,
// 也就是将调用者的test方法输出的结果与参数的test方法的结果进行与操作,只有同时满足时,才输出结果。
default Predicate<T> and(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }

示例代码:

// 输出的结果是6,8,10;
// 既满足第一个行为,也满足第二个行为,这就是and的用法
predicateTest2.conditionFilter2(list, item -> item > 5, item -> item % 2 == 0);

public void conditionFilter2(List<Integer> list, Predicate<Integer> predicate1, Predicate<Integer> predicate2) {
        for (Integer in : list) {
            if (predicate1.and(predicate2).test(in)) {
                System.out.println(in);
            }
        }
    }
第三个方法 ------- negate(默认方法)

源码:

// 通过代码分析,可以看出,negate方法进行的是非操作,
// 也就是将调用者的test方法输出的结果与参数的test方法的结果进行非操作,取得相反的结果。
default Predicate<T> negate() {
        return (t) -> !test(t);
    }

示例代码:

// 输出的结果是1,2,3,4,5,7,9;
// 值得注意的是,negate是对predicate.and(predicate2)返回的结果进行操作的,
// 过滤的是list中的符合条件的元素。
 predicateTest2.conditionFilter2(list, item -> item % 2 == 0, item -> item > 5);

 for (Integer in: list) {
    if (predicate.and(predicate2).negate().test(in)) {
        System.out.println(in);
    }
}
第四个方法 ------- or(默认方法)

源码:

// 顾名思义,or代表的就是或,即满足一个条件即可。
default Predicate<T> or(Predicate<? super T> other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }

示例代码:

// 输出的结果: 2,4,6,7,8,9,10;
// 满足一个条件即可
 predicateTest2.conditionFilter2(list, item -> item % 2 == 0, item -> item > 5);

for (Integer in: list) {
            if (predicate.or(predicate2).test(in)) {
                System.out.println(in);
            }
        }
第五个方法 ------- isEqual(静态方法)

源码:

// static---静态方法
// 判断两个参数是不是相等的,
// 返回的Predicate的test方法是用来判断传入的参数是否等于targetRef
static <T> Predicate<T> isEqual(Object targetRef) {
        return (null == targetRef)
                ? Objects::isNull
                : object -> targetRef.equals(object);
    }

示例代码:

// 输出结果是:true
// 将predicateTest2.isEqual("test")中的test与
// predicateTest2.isEqual("test")返回的predicate
// 的test方法的参数进行比较
System.out.println(predicateTest2.isEqual("test").test("test" ));

public Predicate<String> isEqual(Object object) {
        return Predicate.isEqual(object);
    }

你可能感兴趣的:(#,Java8)