Java 8 Predicate<T> 接口

简介

布尔值函数

观察其源码

image.png

要素察觉

  • 返回值是boolean
  • 有抽象方法test
  • 还有与或非(and、negate、or)的默认方法方法,暗示可以两个Predicate对象组合使用
  • 如果理解BiFunction,理解Predicate易如反掌

测试

public class PredicateTest {
    public static void main(String[] args) {
        PredicateTest test = new PredicateTest();
        List<Integer> list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        test.printByCondition(list,l -> l%2==0);//print 偶数
        System.out.println("\n"+"-----------------");
        test.printByConditionNegate(list,l -> l%2==0);   //print 非偶数
        System.out.println("\n"+"-----------------");
        test.printByConditionAnd(list,l -> l%2==0,l -> l>4);  //print 偶数且大于4的数
        System.out.println("\n"+"-----------------");
        test.printByConditionOr(list,l -> l%2==0,l -> l<4);  //print  偶数或小于4 的数
    }
    public void printByCondition(List<Integer> list, Predicate<Integer> predicate){
        //l表示list中的某一个元素   //某个元素满足某种条件就输出
        list.forEach( l -> { if (predicate.test(l))  System.out.print(l+"  "); });
    }
    public void printByConditionNegate(List<Integer> list, Predicate<Integer> predicate){
        //l表示list中的某一个元素     //某元素不满足某种条件输出
        list.forEach( l -> { if (predicate.negate().test(l))  System.out.print(l+"  "); });
    }
    public void printByConditionAnd(List<Integer> list, Predicate<Integer> predicate1,Predicate<Integer> predicate2){
                              //某元素同时满足两个条件
        list.forEach( l -> { if (predicate1.and(predicate2).test(l))  System.out.print(l+"  "); });
    }
    public void printByConditionOr(List<Integer> list, Predicate<Integer> predicate1,Predicate<Integer> predicate2){
                              //某元素满足某一个条件
        list.forEach( l -> { if (predicate1.or(predicate2).test(l))  System.out.print(l+"  "); });
    }
}
复制代码

解释

image.png

image.png

image.png

image.png

  • 一定要时刻记住Lambda表达式含义,即实现接口中的一个抽象方法,最终还是要使用InterFaceClass.method
  • 参数和返回值一个都少不了

小结

Lambda表达式作用

  • 传递行为,而不仅仅是值
  • 提升抽象层次
    • public void printByCondition(List<Integer> list, Predicate<Integer> predicate){
          //l表示list中的某一个元素   //某个元素满足某种条件就输出
          list.forEach( l -> { if (predicate.test(l))  System.out.print(l+"  "); });
      }
      复制代码
    • 单看这个方法只知道满足某个条件就输出,但具体是什么条件并不知道,所以说提升了抽象层次
  • API重用性更好
  • 更加灵活
    • 同一个方法,可以随意的用lambda表达式替换和现实,所以重用性和灵活性更高
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享