阅读 145

Java Lambda表达式

  对一个经常写JS的人来说,Java用起来很不舒服,因为感觉有很多冗余的代码。

Java多线程代码

  即使使用匿名内部类,Java创建线程的代码也会是下面这样:

new Thread(){
	@Override
	public void run() {
		// do some things
	}
}.start();
复制代码

  但是使用JDK8的Lambda表达式就会是这样:

new Thread(()->{
    // do some things
}).start();
复制代码

  JS箭头函数那味儿出来了。

语法

()->{}
()  //  参数列表
->  //  必不可缺,把参数传递给函数体
{}  //  函数体
复制代码

  Lambda是可推导可省略的。能够根据上下文推导出的内同,都可以省略书写。

  参数列表的数据类型可以不写。括号中的参数如果只有一个,()也可以不写。如果{}中的代码只有一行,无论是否有返回值,都可以省略{}(此时会自动return)。

  如果Lambda表达式做的事与其它某个方法相同。可以通过::方法引用符来代替。下面两种方法等价。

s->System.out.println(s);
System.out::println;  // 需要上面表达式的地方可以用这局,等效
复制代码

Lambda使用前提

  • 使用Lambda必须具有接口,并且接口中只有一个抽象方法。无论是JDK内置的还是自己定义的接口。
  • 虽然省略数据类型,但是必须要保证数据类型是正确的。

最后

  使用匿名内部类在编译后会创建一个class文件,意味着要多加载一个类,但是Lambda表达式不会。所以Lambda表达式的性能是比匿名内部类高的。Lambda是延迟加载的,所以可以用在某些地方优化性能。

文章分类
后端
文章标签