900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > java interface 函数_Java8 函数式接口(Functional Interface) 有且仅有一个抽象方法...

java interface 函数_Java8 函数式接口(Functional Interface) 有且仅有一个抽象方法...

时间:2023-08-23 23:18:46

相关推荐

java interface 函数_Java8 函数式接口(Functional Interface) 有且仅有一个抽象方法...

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

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

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

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

JDK 1.8 之前已有的函数式接口:java.lang.Runnable

java.util.concurrent.Callable

java.security.PrivilegedAction

parator

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)

Supplier无T返回T类型参数,方法时 T get()

FunctionTR对类型T参数操作,返回R类型参数,包含方法 R apply(T t)

PredicateTboolean断言型接口,对类型T进行条件筛选操作,返回boolean,包含方法 boolean test(T t)

具体的使用:/**

*Java8内置的四大核心函数式接口:

*Consumer:消费型接口

*Supplier供给型接口

*Function函数型接口

*Predicate段言型接口

*booleantest(Tt)

*/

publicclassTestLamda3{

//Consumer

@Test

publicvoidtest1(){

happy(10000,(m)->System.out.println("这次消费了"+m+"元"));

}

publicvoidhappy(doublemoney,Consumercon){

con.accept(money);

}

//Supplier

@Test

publicvoidtest2(){

Listlist=getNumList(5,()->{

return(int)Math.random()*100;

});

list.forEach(System.out::println);

}

publicListgetNumList(intnum,Suppliersupplier){

Listlist=newArrayList<>();

for(inti=0;i

Integern=supplier.get();

list.add(n);

}

returnlist;

}

//函数式接口

@Test

publicvoidtest4(){

StringnewStr=strHandle("\t\t\twoshinide",(str)->str.trim());

System.out.println(newStr);

}

publicStringstrHandle(Stringstr,Functionfun){

returnfun.apply(str);

}

//段言型接口;将满足条件的字符串放入集合中

@Test

publicvoidtest5(){

Listlist1=Arrays.asList("nihao","hiehei","woai","ni");

Listlist=filterStr(list1,(s)->s.length()>3);

for(Strings:list){

System.out.println(s);

}

}

publicListfilterStr(Listlist,Predicatepre){

Liststrings=newArrayList<>();

for(Stringstring:list){

if(pre.test(string)){

strings.add(string);

}

}

returnstrings;

}

}

全部接口:

序号接口 & 描述

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 表达式想关于重写了函数式接口中的唯一方法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。