【jdk1.8特性】之Predicate

本文深入讲解了Predicate接口的使用,包括test方法、isEqual方法、and、or和negate操作,通过示例代码演示了如何利用这些方法进行条件判断。

Predicate简介

        Predicate是一个功能性的接口,其功能是判断某个参数是否满足表达式。相似的还有BiPredicate<T, U>(使用 test(T t, U u)方法,判断参数t、u是否满足BiPredicate实例所代表的表达式);DoublePredicate(对于基本数据类型double的Predicate);LongPredicate(对于基本数据类型int的Predicate);IntPredicate(对于基本数据类型long的Predicate)。

注:本文主要学习Predicate,学会了Predicate,那么自然就学会了BiPredicate<T, U>、DoublePredicate、
        IntPredicate、LongPredicate。


Predicate学习

  • test(T t)判断t,是否满足Predicate实例所代表的表达式。

/**
 * test(T t): 判断t,是否满足Predicate实例所代表的表达式
 */
@Test
public void test1() {

    // 形参x的数据类型,由Predicate<T>的泛型T指定
    // 定义一个 用于判断的表达式(这里为 x >= 1)
    Predicate<Integer> predicate = x -> x >= 1;

    // 判断参数是否满足 predicate代表的表达式
    boolean resultOne = predicate.test(0);
    boolean resultTwo = predicate.test(1);

    // 输出结果为: false
    System.out.println(resultOne);
    // 输出结果为: true
    System.out.println(resultTwo);
}

运行测试类,控制台输出:

  • isEqual(Object targetRef)判断targetRef,是否与Predicate实例所代表的对象相等。

/**
 * isEqual(Object targetRef): 判断targetRef,是否与Predicate实例所代表的对象相等
 */
@Test
public void test2() {

    /*
     * 等价于:
     *  Predicate<Object> predicate = x -> {
     *      if (x == objA) {
     *         return true;
     *      }
     *      return x.equals(objA);
     *  };
     */
    Object objA = new Object();
    Predicate<Object> predicate = Predicate.isEqual(objA);


    // 判断参数是否满足 predicate代表的表达式
    boolean resultOne = predicate.test(objA);
    boolean resultTwo = predicate.test(null);
    boolean resultThree = predicate.test(new Object());

    // 输出结果为: true
    System.out.println(resultOne);
    // 输出结果为: false
    System.out.println(resultTwo);
    // 输出结果为: false
    System.out.println(resultThree);
}

运行测试类,控制台输出:

  • and(Predicate<? super T> other)对两个Predicate实例取&&,得到新的Predicate实例。

/**
 * and(Predicate<? super T> other): 对两个Predicate实例取&&,得到新的Predicate实例
 */
@Test
public void test3() {

    // 定义两个 用于判断的表达式
    Predicate<Integer> predicateOne = x -> x >= 1;
    Predicate<Integer> predicateTwo = x -> x <= 2;

    /*
     * 对两个表达式取 &&
     *
     * 等价于:Predicate<Integer> predicateThree = x -> x >= 1 && x <= 2;
     */
    Predicate<Integer> predicateThree = predicateOne.and(predicateTwo);

    // 判断参数是否满足 predicateThree代表的表达式
    boolean resultOne = predicateThree.test(0);
    boolean resultTwo = predicateThree.test(1);
    boolean resultThree = predicateThree.test(2);
    boolean resultFour = predicateThree.test(3);

    // 输出结果为: false
    System.out.println(resultOne);
    // 输出结果为: true
    System.out.println(resultTwo);
    // 输出结果为: true
    System.out.println(resultThree);
    // 输出结果为: false
    System.out.println(resultFour);
}

运行测试类,控制台输出:

  • or(Predicate<? super T> other)对两个Predicate实例取||,得到新的Predicate实例。

/**
 * or(Predicate<? super T> other): 对两个Predicate实例取||,得到新的Predicate实例
 */
@Test
public void test4() {

    // 定义两个 用于判断的表达式
    Predicate<Integer> predicateOne = x -> x >= 1;
    Predicate<Integer> predicateTwo = x -> x <= -1;

    /*
     * 对两个表达式取 ||
     *
     * 等价于:Predicate<Integer> predicateThree = x -> x >= 1 || x <= -1;
     */
    Predicate<Integer> predicateThree = predicateOne.or(predicateTwo);

    // 判断参数是否满足 predicateThree代表的表达式
    boolean resultOne = predicateThree.test(-2);
    boolean resultTwo = predicateThree.test(-1);
    boolean resultThree = predicateThree.test(0);
    boolean resultFour = predicateThree.test(1);
    boolean resultFive = predicateThree.test(2);

    // 输出结果为: true
    System.out.println(resultOne);
    // 输出结果为: true
    System.out.println(resultTwo);
    // 输出结果为: false
    System.out.println(resultThree);
    // 输出结果为: true
    System.out.println(resultFour);
    // 输出结果为: true
    System.out.println(resultFive);
}

运行测试类,控制台输出:

  • negate()对当前Predicate实例取!,得到新的Predicate实例。

/**
 * negate(): 对当前Predicate实例取!,得到新的Predicate实例
 */
@Test
public void test5() {

    // 定义两个 用于判断的表达式
    Predicate<Integer> predicateOne = x -> x >= 1;

    /*
     * 等价于:Predicate<Integer> predicate = x -> !(x >= 1);
     * 等价于:Predicate<Integer> predicate = x -> x < 1;
     */
    Predicate<Integer> predicate = predicateOne.negate();

    // 判断参数是否满足 predicateThree代表的表达式
    boolean resultOne = predicate.test(0);
    boolean resultTwo = predicate.test(1);
    boolean resultThree = predicate.test(2);

    // 输出结果为: true
    System.out.println(resultOne);
    // 输出结果为: false
    System.out.println(resultTwo);
    // 输出结果为: false
    System.out.println(resultThree);
}

运行测试类,控制台输出:

Predicate学习完毕

^_^ 如有不当之处,欢迎指正

^_^ 参考链接
               Predicate详解 - 简书

^_^ 参考文档
           
  《jdk api 1.8_google.CHM》

^_^ 测试代码托管链接
               
https://github.com/JustryDeng…Jdk8Feature

^_^ 本文已经被收录进《程序员成长笔记》 ,笔者JustryDeng

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值