关于Java8的lambda表达式

在Java 8中lambda表达式终于被支持了。在其他语言中,匿名函数和lambda表达式早已被广泛使用了。我们常用的Javascript最常见到这一特性:

在Javascript中,函数被当做一种类型,可以像其他类型一样进行传递和调用。这种灵活的匿名函数模式使得Javascript可以很好的进行异步操作。同样在C#中,由于委托的存在,匿名函数也具有十分重要的价值。

在以往,Java中回调操作的标准方式,是使用接口。可以在使用时创建匿名内部类,就地实现接口来完成。例如一个很常见的AWT事件处理例子:

当我们有了lambda表达式之后,事情会变得更加轻松:

Java 8中实现的lambda表达式,和C#的方式如出一辙。lambda表达式有两种写法,一种是单行语句写法,另外一种是语句块写法。单行语句将会把语句表达式的返回值,作为lambda表达式执行后的返回值:

是等价的。

可能对于普通的回调方法而言,lambda表达式还难以展现出优势,而对于链式方法而言简直就是个福利:

在C#中,这种处理方式被语法糖转化为更加“丧心病狂”的万能查询语言——LINQ。

参考文章:

Java 8 的 lambda 表达式: http://www.oschina.net/question/12_59047

Java 8决定采用跟C#一样的Lambda句法:http://developer.51cto.com/art/201109/290372.htm