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
        }
  • 相关阅读:
    javascript中Function、ArrowFunction和GeneratorFunction介绍
    javascript中Function、ArrowFunction和GeneratorFunction介绍
    26个ASP.NET常用性能优化方法
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    什么是去中心化市场(OpenBazaar)
    去中心化共识
    侧链/楔入式侧链
    零知识证明(Zero Knowledge Proof,ZKP)
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/14130870.html
Copyright © 2011-2022 走看看