zoukankan      html  css  js  c++  java
  • 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
        }
  • 相关阅读:
    webAPI 控制器(Controller)太多怎么办?
    mysql Unknown error 1054
    .NET MVC项目设置包含Areas中的页面为默认启动页
    EF C# ToPagedList方法 The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must ……
    控制台Main函数传参
    C#编码规范
    Linq扩展方法
    Linq操作ArrayList
    LINQ和文件目录
    LINQ To Objects
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/14130870.html
Copyright © 2011-2022 走看看