Java自诞生已经有十几个年头了,目前也已经发布了第十三个大版本,其中Java8是常用的版本中最新的一个版本。而Java8最大的特性就是:Lambda表达式、函数式接口和Stream流。
本篇我只介绍Lamda表达式的概念以及简单使用,至于别的我打算放到另一篇文章中讲,否则会导致文章太过臃肿。废话不多说,下面进入正题。
对于Lambda表达式来说,Java是在JDK8之后引入的。其目的是将一段代码作为参数进行传递,其格式为:
(参数列表) -> {逻辑代码块}
在没有Lambda表达式的日子里,为了将一段代码作为参数传递,我们不得不使用对象来实现。但是自从Lambda表达式有了之后,我们就可以跟过去的方式说再见。
下面我写一个简单的例子给大家感受感受。本例子的作用是调用Collections的sort的方法对一个List集合进行降序排序。因为默认的排序方式是升序的,所以我们需要传入自定义的比较器。
首先先来看一些非Lambda表达式方式的实现:
接着再来看看使用Lambda表达式的方式实现:
我这个例子的目的是为了实现一个整型集合的倒序排列。从上图可以看出,使用Lambda表达式方式实现明显要比接口实现类对象方式简洁得多。
那么使用Lambda和不使用Lambda只是这种区别么?不,还有一个区别。那就是编译后是否会生成额外的内部类文件。
不使用Lambda表达式的时候用“javac”编译后效果如下:
使用Lambda表达式时候用“javac”命令编译后效果如下:
对比后发现,使用Lambda方式后还可以避免生成多余的类文件。
既然,使用Lambda表达式这么爽,那么是不是可以无限制使用呢?不,使用Lambda表达式还是有限制条件的,其限制条件就是只能是运用在使用函数式接口的地方。关于函数式接口的内容大家可以自己在网上看相关资料或查看我的另一篇文章:Java8特性:函数式接口之概念篇,这里就不过多提及了。