Java8中有哪些新增的函数式接口

Java 8中有哪些新增的函数式接口?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

公司主营业务:网站建设、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出三江侗免费做网站回馈大家。

从 Java 8 开始便出现了函数式接口(Functional Interface,以下简称FI)

定义为: 如果一个接口只有唯一的一个抽象接口,则称之为函数式接口。为了保证接口符合 FI ,通常会在接口类上添加 @FunctionalInterface 注解。理解了函数式接口可以为 Java 函数式编程打下基础,最终可通过运用函数式编程极大地提高编程效率。

函数式接口 (Functional Interface) 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数式接口可以对现有的函数友好地支持 lambda。

JDK 1.8 之前已有的函数式接口:

  • java.lang.Runnable

  • java.util.concurrent.Callable

  • java.security.PrivilegedAction

  • java.util.Comparator

  • java.io.FileFilter

  • java.nio.file.PathMatcher

  • java.lang.reflect.InvocationHandler

  • java.beans.PropertyChangeListener

  • java.awt.event.ActionListener

  • javax.swing.event.ChangeListener

JDK 1.8 新增加的函数接口:

  • java.util.function

网上很多教程说新增 4 个函数接口是不对的,java.util.function 它包含了很多类,用来支持 Java的 函数式编程,该包中的函数式接口 43 个,但是最主要的是这四个:

(1)功能性接口:Function
(2)断言性接口:Predicate
(3)供给性接口:Supplier
(4)消费性接口:Consumer

详细一点介绍:

函数式接口参数类型返回类型用途
ConsumerTvoid对类型T参数操作,无返回结果,包含方法 void accept(T t)
SupplierT返回T类型参数,方法时 T get()
FunctionTR对类型T参数操作,返回R类型参数,包含方法 R apply(T t)
PredicateTboolean断言型接口,对类型T进行条件筛选操作,返回boolean,包含方法 boolean test(T t)

具体的使用:

/**
 * Java8内置的四大核心函数式接口:
 * Consumer:消费型接口
 * Supplier供给型接口
 * Function函数型接口
 * Predicate段言型接口
 * boolean test(T t)
 */

public class TestLamda3 {

  //Consumer
  @Test
  public void test1(){
    happy(10000,(m)-> System.out.println("这次消费了"+m+"元"));
  }

  public void happy(double money, Consumer con){
    con.accept(money);
  }

  //Supplier
  @Test
  public void test2(){
   List list=  getNumList(5,()->{
      return (int)Math.random()*100;
    });
   list.forEach(System.out::println);
  }

  public List getNumList(int num, Supplier supplier){
     List list=new ArrayList<>();
     for (int i=0; istr.trim());
     System.out.println(newStr);
  }

  public String strHandle(String str,Function fun){
   return fun.apply(str);
  }

  //段言型接口;将满足条件的字符串放入集合中
  @Test
  public void test5(){
    List list1= Arrays.asList("nihao","hiehei","woai","ni");
    List list=filterStr(list1,(s)->s.length()>3);
    for (String s : list) {
      System.out.println(s);
    }
  }
  public List filterStr(List list, Predicate pre){
    List strings=new ArrayList<>();
    for (String string : list) {
      if(pre.test(string)){
        strings.add(string);
      }
    }
    return strings;
  }
}

 全部接口:

序号接口 & 描述
1BiConsumer 

代表了一个接受两个输入参数的操作,并且不返回任何结果

2BiFunction 

代表了一个接受两个输入参数的方法,并且返回一个结果

3BinaryOperator 

代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果

4BiPredicate 

代表了一个两个参数的boolean值方法

5BooleanSupplier 

代表了boolean值结果的提供方

6Consumer 

代表了接受一个输入参数并且无返回的操作

7DoubleBinaryOperator 

代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。

8DoubleConsumer 

代表一个接受double值参数的操作,并且不返回结果。

9DoubleFunction 

代表接受一个double值参数的方法,并且返回结果

10DoublePredicate 

代表一个拥有double值参数的boolean值方法

11DoubleSupplier 

代表一个double值结构的提供方

12DoubleToIntFunction 

接受一个double类型输入,返回一个int类型结果。

13DoubleToLongFunction 

接受一个double类型输入,返回一个long类型结果

14DoubleUnaryOperator 

接受一个参数同为类型double,返回值类型也为double 。

15Function 

接受一个输入参数,返回一个结果。

16IntBinaryOperator 

接受两个参数同为类型int,返回值类型也为int 。

17IntConsumer 

接受一个int类型的输入参数,无返回值 。

18IntFunction 

接受一个int类型输入参数,返回一个结果 。

19IntPredicate 

接受一个int输入参数,返回一个布尔值的结果。

20IntSupplier 

无参数,返回一个int类型结果。

21IntToDoubleFunction 

接受一个int类型输入,返回一个double类型结果 。

22IntToLongFunction 

接受一个int类型输入,返回一个long类型结果。

23IntUnaryOperator 

接受一个参数同为类型int,返回值类型也为int 。

24LongBinaryOperator 

接受两个参数同为类型long,返回值类型也为long。

25LongConsumer 

接受一个long类型的输入参数,无返回值。

26LongFunction 

接受一个long类型输入参数,返回一个结果。

27LongPredicate 

R接受一个long输入参数,返回一个布尔值类型结果。

28LongSupplier 

无参数,返回一个结果long类型的值。

29LongToDoubleFunction 

接受一个long类型输入,返回一个double类型结果。

30LongToIntFunction 

接受一个long类型输入,返回一个int类型结果。

31LongUnaryOperator 

接受一个参数同为类型long,返回值类型也为long。

32ObjDoubleConsumer 

接受一个object类型和一个double类型的输入参数,无返回值。

33ObjIntConsumer 

接受一个object类型和一个int类型的输入参数,无返回值。

34ObjLongConsumer 

接受一个object类型和一个long类型的输入参数,无返回值。

35Predicate 

接受一个输入参数,返回一个布尔值结果。

36Supplier 

无参数,返回一个结果。

37ToDoubleBiFunction 

接受两个输入参数,返回一个double类型结果

38ToDoubleFunction 

接受一个输入参数,返回一个double类型结果

39ToIntBiFunction 

接受两个输入参数,返回一个int类型结果。

40ToIntFunction 

接受一个输入参数,返回一个int类型结果。

41ToLongBiFunction 

接受两个输入参数,返回一个long类型结果。

42ToLongFunction 

接受一个输入参数,返回一个long类型结果。

43UnaryOperator 

接受一个参数为类型T,返回值类型也为T。

总结

函数式接口 (Functional Interface) 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

函数式接口是为了 lambda 表达式服务,函数式接口的存在是 lambda 表达式出现的前提,lambda 表达式想关于重写了函数式接口中的唯一方法。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


当前文章:Java8中有哪些新增的函数式接口
文章出自:http://ybzwz.com/article/gejogc.html