调整到合适的心态
想要尝试运用最新的特性编写出更加高效和整洁的代码,你必须了解一下几个新的概念--好吧,至少鄙人需要。什么是lambda表达式?
最简单的看待lambda表达式的方式就是,你可以把它看做一个方法:”它提供一系列的正式的参数和一个通过这些参数来表述逻辑的方法体---它可以是一个表达式或者一个代码段。lambda表达式的参数可以是声名的或者引用的,当这些参数是引用类型的时候,那么这些类型就是源于针对lambda表达式的功能性接口。从返回值来看,一个lambda表达式可以是无返回值的--它们不返回任何结果,或者是有返回值的--在表达式里面的某个执行语句返回一个值。
下面是一个lambda表达式的例子:
01 |
(a) ( int a, int b) -> a + b
|
03 |
(b) ( int a, int b) -> {
|
什么是功能性接口呢?一个功能性接口就是一个只含有抽象方法的接口,只是声名了一个函数。在某些场合下,这个唯一的函数可能是一个带有重载因子的的多态函数,这种情况下,所有的函数对外都是一个函数。除了典型的通过新建和初始化一个类来新建一个接口实例,功能性接口实例还可以通过使用一个lambda表达式、方法、或者构造引用来达到新建实例的效果。下面是一个功能性接口的例子:
2 |
public interface FuncInterface {
|
3 |
public void invoke(String s1, String s2);
|
下面是来自java api的功能性接口:
3 |
java.util.concurrent.Callable
|
4 |
java.awt.event.ActionListener
|
接下来让我们来看看一个线程的启动在future中可能会发生怎么的变化:
旧方式:
1 |
new Thread( new Runnable() {
|
4 |
for ( int i= 0 ; i< 9 ; i++) {
|
5 |
System.out.println(String.format( "Message #%d from inside the thread!" , i));
|
新方式:
2 |
for ( int i= 0 ; i< 9 ; i++) {
|
3 |
System.out.println(String.format( "Message #%d from inside the thread!" , i));
|
即使我还没有写过与java swing,AWT相关的功能,但是我还是可以断定:lambdas肯定会给那些Swing开发者带去很多的便利。
动作监听:
01 |
JButton button = new JButton( "Click" );
|
04 |
button.addActionListener( (e) -> { |
05 |
System.out.println( "The button was clicked!" );
|
09 |
button.addActionListener( new ActionListener() {
|
11 |
public void actionPerformed(ActionEvent e) {
|
12 |
System.out.println( "The button was clicked using old fashion code!" );
|
什么是SAM?SAM 是单个抽象方法的替代,因此,直接一点,我们可以说SAM==功能性接口。即使在最初的规范里面,只有一个抽象方法的抽象类被认为是SAM类型的,很多人还是发现/猜出了这样定义的原因。
方法/构造方法 引用
相关推荐
JDK 8免费版是款革命性开发平台,其全面升级现有Java编程模式,带来一项协同开发的JVM、Java语言以及库。 JDK的最重要命令行工具: 1、ja: 启动JVM执行class 2、jac: 编译器 3、jar: 打包工具 4、jadoc: ...
该视频详细讲述了JDK的安装过程!看这个视频需要下载atrecply.msl这个安装视频
下面小编就为大家带来一篇Ubuntu 安装 JDK8 的两种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
jdk1.8.0_77是Sun公司针对Java开发员的...所以JDK是一个开发环境,用于构建应用程序,applet程序,和使用java编程语言的组成部分,需要的小伙伴快来下载体验吧,小编给大家带来了完整的教程,跟着小编一起来看看吧。
,因为根据《2022 年Java生态系统状况报告》来看,目前市场比较主流的JDK版本还是JDK8以及JDK11。 由于JDK8已经在市场稳居很长一段时间了 ,一起来探究关于JDK11带来的新特性吧,请注意在使用时需要在集成开发环境中...
网上资源太多,看了许久终于自己整明白了,本次软件版本为2012年截至到目前的最新版本,希望能给大家带来帮助
下面小编就为大家带来一篇linux下查看已经安装的jdk 并卸载jdk的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
JDK发布新版本后,汉化的API要推迟很久才会出来,这对一些英语稍微差的同事来说非常不方便,我通过网络搜集,希望该资源能给大家工作带来便利!
下面小编就为大家带来一篇Linux下JDK中文字体乱码的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇linux下配置jdk环境变量的三种方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇解决调试JDK源码时,不能查看变量的值问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇linux上配置jdk时,java命令提示没有此文件或文件夹的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇解决maven update project 后项目jdk变成1.5的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起 小编过来看看吧
java开发少不了安装jdk,jdk可以同时安装多个版本,只要在项目部署时注意切换版本选择,下面小编给大家带来了window系统安装jdk jre的教程图解,感兴趣的朋友一起看看吧
下面小编就为大家带来一篇Java JDK 二分法 分析demo(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
使用jdk8提供的lambda进行并行计算.mp4 了解多线程所带来的安全风险.mp4 从线程的优先级看饥饿问题.mp4 从Java字节码的角度看线程安全性问题.mp4 synchronized保证线程安全的原理(理论层面).mp4 synchronized保证...
| 第9节Spring对并发的支持:Spring的异步任务00:11:10分钟 | 第10节使用jdk8提供的lambda进行并行计算00:14:22分钟 | 第11节了解多线程所带来的安全风险00:13:16分钟 | 第12节从线程的优先级看饥饿问题00:18:42分钟...
下面小编就为大家带来一篇Java中BigDecimal的基本运算(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
看看分别是什么意思? 初始化桶大小,因为底层是数组,所以这是数组默认的大小。 桶最大值。 默认的负载因子(0.75) table 真正存放数据的数组。 Map 存放数量的大小。 桶大小,可在初始化时显式指定。 负载因子,...
第10节使用jdk8提供的lambda进行并行计算00:14:22分钟 | 第11节了解多线程所带来的安全风险00:13:16分钟 | 第12节从线程的优先级看饥饿问题00:18:42分钟 | 第13节从Java字节码的角度看线程安全性问题00:25:43分钟...