java.util.function.Predicate 学习

接口方法

  • boolean test(T t);:具体的断言操作,需要先生成Predicate对象
  • default Predicate<T> and(Predicate<? super T> other):调用当前Predicate对象后在调用other的Predicate对象,两者是的关系,即:&&
  • default Predicate<T> or(Predicate<? super T> other):调用当前Predicate对象后在调用other的Predicate对象,两者是的关系,即:||
  • default Predicate<T> negate():取当前Predicate对象断言后的操作,即:!
  • static <T> Predicate<T> isEqual(Object targetRef):静态方法,直接调用,对象相等。返回一个Predicate对象

实际使用如下:

package com.message.demo.fun;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

public class TestPredicate {

    public static void main(String[] args) {
        Predicate<Integer> gt = s -> s > 5;
        Predicate<Integer> multipleOf_5 = s -> s % 5 == 0;
        Predicate<Integer> multipleOf_2 = s -> s % 2 == 0;
        Predicate<Integer> lt = s -> s < 5;

        System.out.println("10 大于 5: " + gt.test(10));
        System.out.println("10 小于 5: " + lt.test(10));
        System.out.println("20 大于 5,且是5的倍数: " + gt.and(multipleOf_5).test(20));
        System.out.println("8 是 5 或 2 的倍数: " + multipleOf_5.or(multipleOf_2).test(8));
        System.out.println("GET 等于 get: " + Predicate.isEqual("get").test("GET"));
        System.out.println("取 10 大于5 的反" + gt.negate().test(10));

        List<String> list = Arrays.asList("java","js","python","vue","scala");

        List<String> stringList = filter(list, s -> s.contains("j") || s.contains("a"));

        System.out.println(stringList);
    }

    public static  <T> List<T> filter(List<T> list, Predicate<T> action) {
        ArrayList<T> arrayList = new ArrayList<>();
        list.forEach(item -> {
            if (action.test(item)) {
                arrayList.add(item);
            }
        });
        return arrayList;
    }
}
posted @ 2021-09-07 14:29  陈析  阅读(464)  评论(0)    收藏  举报