Java 8 Predicate类基本使用详解

一、基本方法

1.1、test(T t) 方法:

       test方法主要用于参数符不符合规则。返回值 boolean

写法如下:

 Predicate fourLetterLong1 = new Predicate() {
            @Override
            public boolean test(String s) {
                return s.length()>4 ?true:false ;
            }
        };

配合Lambda filter 使用如下:

public static void main(String[] args) {
        List names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp","Hell","opt");
        Predicate fourLetterLong1 = new Predicate() {
            @Override
            public boolean test(String s) {
                return s.length()>4 ? true : false ;
            }
        };
        names.stream()
                .filter(fourLetterLong1)
                .forEach((n) -> System.out.println("this is:" + n));
    }

1.2 、and(Predicate other)

 default Predicate and(Predicate other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) && other.test(t);
    }

         add 方法等同于我们的逻辑与&&,存在短路特性,需要所有条件都满足

配合Lambda filter 使用如下:

public static void main(String[] args) {
        List names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp", "Hell", "opt");
        
        Predicate fourLetterLong1 = new Predicate() {
            @Override
            public boolean test(String s) {
                return s.length() > 4 ? true : false;
            }
        };
        
        Predicate startsWith = new Predicate() {
            @Override
            public boolean test(String s) {
                return s.equals("Haskell") ? true : false;
            }
        };

        names.stream()
                .filter(fourLetterLong1.and(startsWith))
                .forEach((n) -> System.out.println("this is:" + n));
    }

 

1.3 、or(Predicate other)

default Predicate or(Predicate other) {
        Objects.requireNonNull(other);
        return (t) -> test(t) || other.test(t);
    }

      or 等同于我们的逻辑或 || ,多个条件只要一个满足即可

配合Lambda filter 使用如下:

 public static void main(String[] args) {
        List names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp", "Hell", "opt");

        Predicate fourLetterLong1 = new Predicate() {
            @Override
            public boolean test(String s) {
                return s.length() > 4 ? true : false;
            }
        };

        Predicate startsWith = new Predicate() {
            @Override
            public boolean test(String s) {
                return s.equals("zzz") ? true : false;
            }
        };

        names.stream()
                .filter(fourLetterLong1.or(startsWith))
                .forEach((n) -> System.out.println("this is:" + n));
    }

 1.4、negate()方法

        negate等同于我们的逻辑非 !

配合Lambda filter 使用如下:

 public static void main(String[] args) {
        List names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp", "Hell", "opt");

        Predicate fourLetterLong1 = new Predicate() {
            @Override
            public boolean test(String s) {
                return s.length() > 4 ? true : false;
            }
        };

        names.stream()
                .filter(fourLetterLong1.negate())
                .forEach((n) -> System.out.println("this is:" + n));
    }

Java 8 Predicate类基本使用详解_第1张图片

1.5、isEqual(Object targetRef)方法

static  Predicate isEqual(Object targetRef) {
        return (null == targetRef)
                ? Objects::isNull
                : object -> targetRef.equals(object);
    }

       isEqual 类似于equals()区别在于:先判断对象是否为NULL,不为Null的话再使用equals()方法进行比较

配合Lambda filter 使用如下:

public static void main(String[] args) {
        List names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp", "Hell", "opt");

       
        Predicate isEqual = new Predicate() {
            @Override
            public boolean test(String s) {
                return Predicate.isEqual("Java").test(s) ? true : false;
            }
        };
        names.stream()
                .filter(isEqual)
                .forEach((n) -> System.out.println("this is:" + n));
    }

二、扩展

 使用Lambda 新特性和String类中的方法 多条查询

public static void main(String[] args) {
        List names = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp", "Hell", "opt");
        //长度为7
        Predicate length = (n) -> n.length() == 4;
        // endsWith 方法字符串是否以指定的前缀开头。
        Predicate startsWith = (n) -> n.startsWith("J");
        // endsWith 字符串是否以指定的后缀结尾。
        Predicate endsWith = (n) -> n.endsWith("a");
        Predicate isEqual = (n) ->Predicate.isEqual("Haskell").test(n);
        names.stream()
                .filter(length.and(startsWith).and(endsWith).or(isEqual))
                .forEach((n) -> System.out.println("this is:" + n));
    }

 

你可能感兴趣的:(Java基础)