前言:
目前各位老铁们对“lambda表达式由来”都比较看重,大家都需要分析一些“lambda表达式由来”的相关文章。那么小编同时在网摘上收集了一些有关“lambda表达式由来””的相关知识,希望我们能喜欢,小伙伴们一起来了解一下吧!目录
什么是Lambda表达式?
Lambda表达式的语法规则
Lambda表达式与函数式接口
Lambda表达式与方法引用
Lambda表达式与Stream API
什么是Lambda表达式?
Lambda表达式是JAVA8中的一种新特性,是一个匿名函数,就是没有名字的函数。它的出现是为了帮助程序员写出更加简洁,更加灵活的程序。在之前的语法中,只有数值可以进行传递,但使用Lambda表达式则可实现代码块的传递。Lambda在Python、C++等语言中都得到很好的应用,本文主要基于Java进行介绍。
下面是非常经常用到的创建线程的代码:
使用传统的方法会有如下的一些问题:
1、要使用run方法,必须实现Runnable接口;
2、必须对run方法进行重写,而且不能出错;
3、我们只关心run方法体中的代码,但其它代码又不得不实现。
从以上分析来看,传统的写法是比较复杂的。如果使用Lambda表达式对上述程序进行改造:
可以看出,语句变得清晰简洁了很多,语法也更简单。而这个过程则可以看成是将run方法体代码块作为整体赋值给了变量,作为Thread的参数,实现了代码的传递。
Lambda表达式的语法规则
Lambda表达式的标准格式由三个部分组成,分别为参数列表、方法体和箭头“->”。
(参数类型 参数名称) -> {
代码体;
}
定义一个接口:
调用:
传统方法和Lambda方法都可以打印出log,但明显Lambda表达式更简单。
Lambda表达式与函数式接口
Lambda表达式使用前提是需要有函数式接口,函数式接口指的是只有一个方法的接口,因为只有一个方法,所以可以简写,不需要关注具体使用了接口内部哪个方法。也可以通过添加@FunctionalInterface标志注解,被注解的接口只能声明一个抽象方法。
除了自定义的函数式接口,JDK中也提供了大量的函数式接口,方便我们可以使用Lambda表达式。
1、Supplier
Supplier是一个无参数,有返回值的接口,返回一个数据类型。
1、 Consumer
Consumer是一个有参数,无返回值的接口。主要用来处理传入的数据。
2、 Function
Function是一个有参数,有返回值的接口。
3、 Predicate
Predicate是有参数,返回值为Boolean类型的接口。
在Predicate的默认方法中还提供了一些逻辑关系操作,如and、or、isEquals等方法。
Lambda表达式与方法引用
在Lambda方法体中的很有可能实现的是重复的代码,对于这种已经有方法实现的情况,就可以使用方法引用来使用已有方法。
通过使用两个冒号“::”来进行方法引用,形式也很灵活,有对象名::方法名,类名::静态方法,类名::普通方法,类名::构造器,数组::构造器几种形式。
最常用当属对象名::方法名的引用方法。
以上将Lambda获取时间的方法体,使用方法引用的方式,更加的简单。
Lambda表达式与Stream API
在Java传统集合的使用上,针对不同的需求,需要通过一次次的遍历达到处理数据的目的,这就造成了代码的冗余和效率的降低。而Stream API就相当于一个流水线作业,将不同的需求串起来,得到最终的“成品”。
使用传统的方法获取集合中张姓三个字名字的列表,如下:
而使用Stream后,一串代码就搞定:
写在最后
Lambda表达式作为JAVA8主要的新特性,并不是非用不可,但学会并灵活运用,可以让代码逻辑更加的清晰简单,在阅读别人使用Lambda的程序里也更加的容易,所以,Lambda表达式还是很有必要掌握的。
标签: #lambda表达式由来