欢迎光临散文网 会员登陆 & 注册

Java 8 的这些特性,你知道吗?

2020-11-24 14:42 作者:每天一个秃顶小技巧  | 我要投稿

作为一个心怀大教堂之愿景的搬砖码农,伴着一行代码一块砖的节奏,生产环境上 JDK 的版本从 1.4 逐步升级到 8。


而 JDK 都到 14 啦,而多数程序员编写的代码依然停滞在 Java 6,而每当看到小鲜肉写的代码,到处都是 Lambda 表达式、流式操作 Stream API ... ...,着实很懵 B。


为了能跟小鲜肉看齐,老码农很有必要熟练一下 Java 8 的那些新特性啦。

1

函数式接口


如 Runnable 源码所示,接口中定义了唯一一个抽象方法 run,那么类似这种的接口,在 Java 8 中称之为函数式接口,是 Java 8 引入的一个核心概念。


仔细看 Runnable 的源码,会发现引入了一个新的注解:@FunctionalInterface,用来表示这个接口是一个函数式接口。


@FunctionalInterface 这个注解是非必须的,若接口只包含一个方法的接口,虚拟机会自动判断,不过最好在接口上使用注解 @FunctionalInterface 进行声明。在接口中添加了 @FunctionalInterface 的接口,只允许有一个抽象方法,否则编译器也会报错。

2

Lambda 表达式

Lambda 表达式是推动 Java 8 发布的最重要新特性,可以使用 Lambda 实例化函数式接口。

在 Java 8 之前,匿名内部类,监听器和事件处理器的使用都显得很冗长,代码可读性很差,而采用 Lambda 表达式则可以使代码变的更加简洁紧凑。

(图片来源于网络)

代码片段一:

上面代码是创建线程的代码片段,这种代码很常见,而采用 Lambda 表达式,则会很简洁。


很显然,代码确实是简化了不少。代码是否能读懂?没关系,稍后做解释。

代码片段二:

哎呦,我去!妥妥的一行代码搞定,确实简化了不少。

烟味灭酒过半,是时候真正认识一下 Lambda 表达式啦。

Lambda 表达式

Lambda 表达式,由三个部分组成。

第一部分:为一个括号内用逗号分隔的形式参数,参数是函数式接口里面方法的参数,例如代码片段二中的参数 ActionEvent e;

第二部分:为一个箭头符号:->;

第三部分:为方法体,可以是表达式和代码块。

具体语法如下:

Lambda 表达式的语法很简单,不过有些准则还是要提一提。

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。

  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。

  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。

  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指明表达式返回了一个数值。

那回头看看开篇提到的代码片段一、片段二,看完它们的简化过程,就很容易理解啦。

代码片段一,简化过程:

代码片段二,简化过程:

通过上面两段代码的简化过程,很显然使用 Lambda 表达式,可以很大程度上简化代码。

3

Stream:流式操作

Java 8 引入了流式操作(Stream),通过流式操作可以实现对集合的并行处理和函数式操作,想象成把要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

最重要的是:通过 Stream API 可以让程序员写出高效率、干净、简洁的代码。 Talk is cheap. Show me the code.

代码片段一:「filter」从集合中找出符合条件的数据。



还有很多 Stream 的 API,不再一一举例,用法套路都差不多,其实是一个熟能生巧的过程。本次,主要对 Java 8 中引入的部分新特性,进行初步的讲解。若想要快速投入实战,还要靠各位下去结合本文的代码片段进行多写、多悟,写着写着就有感觉啦,油从钱孔入而钱不湿唯手熟而已。


Java 8 的这些特性,你知道吗?的评论 (共 条)

分享到微博请遵守国家法律