关于函数式接口中常用的Supplier、Consumer、predicate、Function的总结以及其使用场景

发布时间 2024-01-10 15:42:54作者: 郭慕荣

首先介绍一下函数式接口:
函数式接口在Java中是指:有且仅有一个抽象方法的接口。
函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。在JDK中为我们提供了大量的函数式接口,其中较为简单和常用的为以下4个:Supplier、Consumer、predicate、Function.

  • Supplier接口:java.util.function.Supplier 接口仅包含一个无参的方法: T get() 。用来获取一个泛型参数指定类型的对象数据。由于这是一个函数式接口,这也就意味着对应的Lambda表达式需要“对外提供”一个符合泛型类型的对象数据。
  • Consumer接口:java.util.function.Consumer 接口则正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定的.
  • Predicate接口:有时候我们需要对某种类型的数据进行判断,从而得到一个boolean值结果。这时可以使用 java.util.function.Predicate 接口。
  • Function接口:java.util.function.Function<T,R> 接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件.

4种函数式接口使用场景个人总结:

  • Supplier(生产者) :他的泛型一定和方法的返回值类型是一种类型,如果需要获得一个数据,并且不需要传入参数,可以使用Supplier接口.
  • Consumer(消费者):如果想要处理一个数据,但是不需要返回值,可以使用Consumer接口
  • predicate(判断):如果想要判断一个数据,并且需要一个布尔类型的返回值,可以使用predicate接口.
  • Function(函数):如果想要进行属性之间的转换,如String->Integer,则需要使用Function接口,
  • Function的泛型一般有两种类型,前面的类型表示传入的参数类型,后面的类型表示返回值类型.