15. 《重学 JAVA》--Lambda 表达式
![15. 《重学JAVA》--Lambda表达式](https://static001.geekbang.org/infoq/ee/eeaaf8d2b6736f5039d5acfe1bc98fd2.jpeg)
一、Lambda 表达式
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中),Lambda 表达式是 JavaSE8 中一个重要的新特性。lambda 表达式允许你通过表达式来代替功能接口。lambda 表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。
Lambda 表达式还增强了集合库。JavaSE8 添加了 2 个对集合数据进行批量操作的包: java.util.function 包以及 java.util.stream 包。流(stream)就如同迭代器(iterator),但附加了许多额外的功能。总的来说,lambda 表达式和 stream 是自 Java 语言添加泛型(Generics)和注解(annotation)以来最大的变化。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
二、重要特征
l 类型声明:不需要声明参数类型,编译器可以统一识别参数值。
参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
大括号:如果主体包含了一个语句,就不需要使用大括号。
返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值。
三、访问变量
Lambda 表达式可以访问所在外层作用域内定义的变量,包括:成员变量和局部变量。
3.1 成员变量
成员变量和静态成员变量。在 Lambda 表达式中可以访问这些成员变量,此时的 Lambda 表达式与普通方法一样,可以读取成员变量,也可以修改成员变量。
3.2 局部变量
对于成员变量的访问 Lambda 表达式与普通方法没有区别,但是对于访问外层局部变量时,会发生“捕 获变量”情况。Lambda 表达式中捕获变量时,会将变量当成 final 的,在 Lambda 表达式中不能修改那些捕获的变量
版权声明: 本文为 InfoQ 作者【杨鹏Geek】的原创文章。
原文链接:【http://xie.infoq.cn/article/228557174a31efe3c759ae6b5】。文章转载请联系作者。
评论