对Lambda表达式的疑问
Lambda 概念
Lambda 表达式是一种匿名函数(对 Java 而言这并不完全正确,但现在姑且这么认为),简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。
Lambda 表达式的结构
Java 中的 Lambda 表达式通常使用 (argument) -> (body) 语法书写,例如:
(arg1, arg2…) -> { body }
(type1 arg1, type2 arg2…) -> { body }
让我们了解一下 Lambda 表达式的结构。
1、一个 Lambda 表达式可以有零个或多个参数
2、参数的类型既可以明确声明,也可以根据上下文来推断。例如:(int a)与(a)效果相同
3、所有参数需包含在圆括号内,参数之间用逗号相隔。例如:(a, b) 或 (int a, int b) 或 (String a, int b, float c)
4、空圆括号代表参数集为空。例如:() -> 42
5、当只有一个参数,且其类型可推导时,圆括号()可省略。例如:a -> return a*a
6、Lambda 表达式的主体可包含零条或多条语句
7、如果 Lambda 表达式的主体只有一条语句,花括号{}可省略。匿名函数的返回类型与该主体表达式一致
8、如果 Lambda 表达式的主体包含一条以上语句,则表达式必须包含在花括号{}中(形成代码块)。匿名函数的返回类型与代码块的返回类型一致,若没有返回则为空
Lambda 表达式举例
//旧方法:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello from thread");
}
}).start();
//新方法:
new Thread(
() -> System.out.println("Hello from thread")
).start();
Lambda 表达式与匿名类的区别
使用匿名类与 Lambda 表达式的一大区别在于关键词的使用。对于匿名类,关键词 this 解读为匿名类,而对于 Lambda 表达式,关键词 this 解读为写就 Lambda 的外部类。
个人疑问
1、Lambda表达式只是为了精简和紧凑代码的写法吗?
有没有性能方面的提升呢?
2、如果没有提升性能,那么这个Lambda表达式因为精简而采用一种普通人看不懂的写法有何意义?(这里的普通人是指没有学过lambda表达式的人,我相信如果没有专门学过这个lambda,肯定看不懂它的写法表达的东西)
3、个人感觉lambda表达式就是为了行内人的炫耀装逼模式?
一种精简到完全看不出表达的意思的语句的写法,这跟我们平时定义变量需要见名知意的要求不是背道而驰了吗?
参考:
http://blog.oneapm.com/apm-tech/226.html