• JDK8新特性-Predicate 接口


    概述

    • JDK8 提供的函数式接口
    • 提供一个抽象方法test, 接受一个参数, 根据这个参数进行一些判断, 返回判断结果 true / false
    • 提供几个默认的default方法, and, or, negate 用于进行组合判断
    • 在流中被广泛使用
    FunctionalInterface
    public interface Predicate<T> {
        /**
         * 具体过滤操作 需要被子类实现.
         * 用来处理参数T是否满足要求,可以理解为 条件A
         */
        boolean test(T t);
        /**
         * 调用当前Predicate的test方法之后再去调用other的test方法,相当于进行两次判断
         * 可理解为 条件A && 条件B
         */
        default Predicate<T> and(Predicate<? super T> other) {
            Objects.requireNonNull(other);
            return (t) -> test(t) && other.test(t);
        }
        /**
         * 对当前判断进行"!"操作,即取非操作,可理解为 ! 条件A
         */
        default Predicate<T> negate() {
            return (t) -> !test(t);
        }
        /**
         * 对当前判断进行"||"操作,即取或操作,可以理解为 条件A ||条件B
         */
        default Predicate<T> or(Predicate<? super T> other) {
            Objects.requireNonNull(other);
            return (t) -> test(t) || other.test(t);
        }
    
        /**
         * 对当前操作进行"="操作,即取等操作,可以理解为 A == B
         */
        static <T> Predicate<T> isEqual(Object targetRef) {
            return (null == targetRef)
                    ? Objects::isNull
                    : object -> targetRef.equals(object);
        }
    }

    常规示例:

      public static void main(String[] args) {
            /**
             * 1、判断数字是否大于7
             */
            //设置一个大于7的过滤条件
            Predicate<Integer> predicate = x -> x > 7;
            System.out.println(predicate.test(10)); //输出 true
            System.out.println(predicate.test(6));  //输出 fasle
             /**
              * 2、大于7并且
              */
            //在上面大于7的条件下,添加是偶数的条件
            predicate = predicate.and(x -> x % 2 == 0);
            System.out.println(predicate.test(6));  //输出 fasle
            System.out.println(predicate.test(12)); //输出 true
            System.out.println(predicate.test(13)); //输出 fasle
            /**
             * 3、add or 简化写法
             */
            predicate = x -> x > 5 && x < 9;
            System.out.println(predicate.test(10)); //输出 false
            System.out.println(predicate.test(6));  //输出 true
        }
  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/14130870.html
Copyright © 2020-2023  润新知