多平台统一管理软件接口,如何实现多平台统一管理软件接口
271
2023-04-24
浅析Java8新特性Lambda表达式和函数式接口
什么是Lambda表达式,java8为什么使用Lambda表达式?
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。我们可以把 Lambda表达式理解为是 一段可以传递的代码。最直观的是使用Lambda表达式之后不用再写大量的匿名内部类,简化代码,提高了代码的可读性。
// 启动一个线程,不使用Lambda表达式
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("启动一个线程");
}
}).start();
//使用Lambda表达式,只需要一行代码
new Thread(() -> System.out.println("启动一个线程")).start();
Lambda表达式的基本语法和格式
基本语法
java8中引入了新的操作符”->”,称为箭头操作符或者lambda操作符,箭头操作符将lambda拆分为两部分,左侧:lambda表达式的参数列表,右侧:lambda表达式中的所需要执行的的功能(接口实现的功能代码)。
lambda表达式需要“函数式接口”的支持,接口中只有一个抽象方法的接口称为函数式接口,可以使用注解@FunctionalInterface检查接口是否是函数式接口。
lambda表达式的参数列表的数据类型可以省略不写,因为jvm编辑器可以通过上下文判断。
基本格式
① 无参数,无返回值。( ) -> System.out.println(“hello”)
// 实现Runnable接口(无参,无返回)
Runnable r = () -> System.out.println("hello lambda");
② 一个参数(小括号可以省略不写,习惯上加上小括号),无返回值。(x) -> System.out.println(x)
//Consumer接口(一个参数,无返回值),之后会提到
//第一种,小括号不省略
Consumer
c.accept("hello");
//小括号省略
Consumer
c1.accept("hello")
③ 有多个参数,并且lambda有多条语句,则lambda语句必须用大括号括起来并有return返回(若有一条语句则可以省略大括号和return),有返回值。(x,y) ->{System.out.println(“hello”);return Integer.compare(x, y);};
//Comparator接口
//多条语句
Comparator
System.out.println("hello");
return Integer.compare(x, y);
};
//一条语句
Comparator
System.out.println(comparator2.compare(23, 22));
还有其他的一些格式都是大同小异,这里就不再了解。
函数式接口是什么?
在前面也提到了函数接口,那么函数接口到底是什么呢?是个接口,只包含一个抽象方法,那么它就是函数式接口,我们可以在任意函数式接口上使用 @FunctionalInterface 检查它是否是一个函数式接口。
函数式接口里是可以包含默认方法、静态方法,他们不是抽象方法;也可以包含Java.lang.Object里的public方法,因为任何一个类都继承Object类,包含了来自java.lang.Object里对这些抽象方法的实现,也不属于抽象方法;函数式接口里允许子接口继承多个父接口,但每个父接口中都只能存在一个抽象方法,且必须的相同的抽象方法。
Java8内置函数式接口
四大核心函数式接口
函数式接口
方法
参数类型
返回类型
作用
Consumer
void accept(T t)
T
void
对T类型的参数进行操作
Supplier
T get()
无
T
操作数据,返回T类型的结果
Function
R apply(T t)
T
R
对T类型参数进行操作,并返回R类型的结果
Predicate
boolean test(T t)
T
boolean
确定T类型参数是否满足某约束,并返回boolean值
//Consumer
@Test
public void test1(){
Consumer
c.accept("Java");
}
// Supplier
@Test
public void test2(){
Supplier
String str = s.get();
System.out.println(str);
}
//Function
@Test
public void test3(){
Function
Integer len = f.apply("hello");
System.out.println(len);
}
//Predicate
@Test
public void test4(){
Predicate
boolean b = p.test("hello Java");
System.out.println(b);
}
其它函数式接口
函数式接口
方法
参数类型
返回类型
作用
BiFunction
R apply(T t, U u)
T, U
R
对 T, U 类型的参数进行操作,并返回R类型的结果
UnaryOperator
T apply(T t)
T
T
对 T类型的参数进行一元运算,并返回R对象的结果
BinaryOperato
T apply(T t1, T t2
T, T
T
对T类型的参数进行二元运算,并返回T类型的结果
BiConsumer
void accept(T t, U u)
T, U
void
对T,作
ToIntToIntFunction int(long,double) applyAsInt(T value) T int, long, double 计 算 int 、 long 、double值的函数 IntFunction R apply(int(long,double) value) int, long, double R 参数分别为int、long、double 类型的函数 总结 以上所述是给大家介绍的Java8新特性Lambda表达式和函数式接口,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!
int(long,double) applyAsInt(T value)
T
int, long, double
计 算 int 、 long 、double值的函数
IntFunction
R apply(int(long,double) value)
int, long, double
R
参数分别为int、long、double 类型的函数
总结
以上所述是给大家介绍的Java8新特性Lambda表达式和函数式接口,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~