多平台统一管理软件接口,如何实现多平台统一管理软件接口
385
2023-01-16
浅谈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
详细一点介绍:
函数式接口
参数类型
返回类型
用途
Consumer
T
void
对类型T参数操作,无返回结果,包含方法 void accept(T t)
Supplier
无
T
返回T类型参数,方法时 T get()
Function
T
R
对类型T参数操作,返回R类型参数,包含方法 R apply(T t)
Predicate
T
boolean
断言型接口,对类型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.accept(money);
}
//Supplier
@Test
public void test2(){
List
return (int)Math.random()*100;
});
list.forEach(System.out::println);
}
public List
List
for (int i=0; i Integer n=supplier.get(); list.add(n); } return list; } //函数式接口 @Test public void test4(){ String newStr=strHandle("\t\t\t woshi nide ",(str)->str.trim()); System.out.println(newStr); } public String strHandle(String str,Function return fun.apply(str); } //段言型接口;将满足条件的字符串放入集合中 @Test public void test5(){ List List for (String s : list) { System.out.println(s); } } public List List for (String string : list) { if(pre.test(string)){ strings.add(string); } } return strings; } } 全部接口: 序号 接口 & 描述 1 BiConsumer 代表了一个接受两个输入参数的操作,并且不返回任何结果 2 BiFunction 代表了一个接受两个输入参数的方法,并且返回一个结果 3 BinaryOperator 代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果 4 BiPredicate 代表了一个两个参数的boolean值方法 5 BooleanSupplier 代表了boolean值结果的提供方 6 Consumer 代表了接受一个输入参数并且无返回的操作 7 DoubleBinaryOperator 代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。 8 DoubleConsumer 代表一个接受double值参数的操作,并且不返回结果。 9 DoubleFunction 代表接受一个double值参数的方法,并且返回结果 10 DoublePredicate 代表一个拥有double值参数的boolean值方法 11 DoubleSupplier 代表一个double值结构的提供方 12 DoubleToIntFunction 接受一个double类型输入,返回一个int类型结果。 13 DoubleToLongFunction 接受一个double类型输入,返回一个long类型结果 14 DoubleUnaryOperator 接受一个参数同为类型double,返回值类型也为double 。 15 Function 接受一个输入参数,返回一个结果。 16 IntBinaryOperator 接受两个参数同为类型int,返回值类型也为int 。 17 IntConsumer 接受一个int类型的输入参数,无返回值 。 18 IntFunction 接受一个int类型输入参数,返回一个结果 。 19 IntPredicate 接受一个int输入参数,返回一个布尔值的结果。 20 IntSupplier 无参数,返回一个int类型结果。 21 IntToDoubleFunction 接受一个int类型输入,返回一个double类型结果 。 22 IntToLongFunction 接受一个int类型输入,返回一个long类型结果。 23 IntUnaryOperator 接受一个参数同为类型int,返回值类型也为int 。 24 LongBiniELBMdElaryOperator 接受两个参数同为类型long,返回值类型也为long。 25 LongConsumer 接受一个long类型的输入参数,无返回值。 26 LongFunction 接受一个long类型输入参数,返回一个结果。 27 LongPredicate R接受一个long输入参数,返回一个布尔值类型结果。 28 LongSupplier 无参数,返回一个结果long类型的值。 29 LongToDoubleFunction 接受一个long类型输入,返回一个double类型结果。 30 LongToIntFunction 接受一个long类型输入,返回一个int类型结果。 31 LongUnaryOperator 接受一个参数同为类型long,返回值类型也为long。 32 ObjDoubleConsumer 接受一个object类型和一个double类型的输入参数,无返回值。 33 ObjIntConsumer 接受一个object类型和一个int类型的输入参数,无返回值。 34 ObjLongConsumer 接受一个object类型和一个long类型的输入参数,无返回值。 35 Predicate 接受一个输入参数,返回一个布尔值结果。 36 Supplier 无参数,返回一个结果。 37 ToDoubleBiFunction 接受两个输入参数,返回一个double类型结果 38 ToDoubleFunction 接受一个输入参数,返回一个double类型结果 39 ToIntBiFunction 接受两个输入参数,返回一个int类型结果。 40 ToIntFunction 接受一个输入参数,返回一个int类型结果。 41 ToLongBiFunction 接受两个输入参数,返回一个long类型结果。 42 ToLongFunction 接受一个输入参数,返回一个long类型结果。 43 UnaryOperator 接受一个参数为类型T,返回值类型也为T。 总结 函数式接口 (Functional Interface) 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口是为了 lambda 表达式服务,函数式接口的存在是 lambda 表达式出现的前提,lambda 表达式想关于重写了函数式接口中的唯一方法。
Integer n=supplier.get();
list.add(n);
}
return list;
}
//函数式接口
@Test
public void test4(){
String newStr=strHandle("\t\t\t woshi nide ",(str)->str.trim());
System.out.println(newStr);
}
public String strHandle(String str,Function
return fun.apply(str);
}
//段言型接口;将满足条件的字符串放入集合中
@Test
public void test5(){
List
List
for (String s : list) {
System.out.println(s);
}
}
public List
List
for (String string : list) {
if(pre.test(string)){
strings.add(string);
}
}
return strings;
}
}
全部接口:
序号
接口 & 描述
1
BiConsumer
代表了一个接受两个输入参数的操作,并且不返回任何结果
2
BiFunction
代表了一个接受两个输入参数的方法,并且返回一个结果
3
BinaryOperator
代表了一个作用于于两个同类型操作符的操作,并且返回了操作符同类型的结果
4
BiPredicate
代表了一个两个参数的boolean值方法
5
BooleanSupplier
代表了boolean值结果的提供方
6
Consumer
代表了接受一个输入参数并且无返回的操作
7
DoubleBinaryOperator
代表了作用于两个double值操作符的操作,并且返回了一个double值的结果。
8
DoubleConsumer
代表一个接受double值参数的操作,并且不返回结果。
9
DoubleFunction
代表接受一个double值参数的方法,并且返回结果
10
DoublePredicate
代表一个拥有double值参数的boolean值方法
11
DoubleSupplier
代表一个double值结构的提供方
12
DoubleToIntFunction
接受一个double类型输入,返回一个int类型结果。
13
DoubleToLongFunction
接受一个double类型输入,返回一个long类型结果
14
DoubleUnaryOperator
接受一个参数同为类型double,返回值类型也为double 。
15
Function
接受一个输入参数,返回一个结果。
16
IntBinaryOperator
接受两个参数同为类型int,返回值类型也为int 。
17
IntConsumer
接受一个int类型的输入参数,无返回值 。
18
IntFunction
接受一个int类型输入参数,返回一个结果 。
19
IntPredicate
接受一个int输入参数,返回一个布尔值的结果。
20
IntSupplier
无参数,返回一个int类型结果。
21
IntToDoubleFunction
接受一个int类型输入,返回一个double类型结果 。
22
IntToLongFunction
接受一个int类型输入,返回一个long类型结果。
23
IntUnaryOperator
接受一个参数同为类型int,返回值类型也为int 。
24
LongBiniELBMdElaryOperator
接受两个参数同为类型long,返回值类型也为long。
25
LongConsumer
接受一个long类型的输入参数,无返回值。
26
LongFunction
接受一个long类型输入参数,返回一个结果。
27
LongPredicate
R接受一个long输入参数,返回一个布尔值类型结果。
28
LongSupplier
无参数,返回一个结果long类型的值。
29
LongToDoubleFunction
接受一个long类型输入,返回一个double类型结果。
30
LongToIntFunction
接受一个long类型输入,返回一个int类型结果。
31
LongUnaryOperator
接受一个参数同为类型long,返回值类型也为long。
32
ObjDoubleConsumer
接受一个object类型和一个double类型的输入参数,无返回值。
33
ObjIntConsumer
接受一个object类型和一个int类型的输入参数,无返回值。
34
ObjLongConsumer
接受一个object类型和一个long类型的输入参数,无返回值。
35
Predicate
接受一个输入参数,返回一个布尔值结果。
36
Supplier
无参数,返回一个结果。
37
ToDoubleBiFunction
接受两个输入参数,返回一个double类型结果
38
ToDoubleFunction
接受一个输入参数,返回一个double类型结果
39
ToIntBiFunction
接受两个输入参数,返回一个int类型结果。
40
ToIntFunction
接受一个输入参数,返回一个int类型结果。
41
ToLongBiFunction
接受两个输入参数,返回一个long类型结果。
42
ToLongFunction
接受一个输入参数,返回一个long类型结果。
43
UnaryOperator
接受一个参数为类型T,返回值类型也为T。
总结
函数式接口 (Functional Interface) 就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口是为了 lambda 表达式服务,函数式接口的存在是 lambda 表达式出现的前提,lambda 表达式想关于重写了函数式接口中的唯一方法。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~