一、什么是Lambda表达式?
对于Lambda表达式的定义,每个人对其理解都不一样,如下:
定义1:
Lambda表达式是一段可以传递的代码,它的核心思想是将面向对象中的传递数据变成传递行为。
定义2:
Lambda 表达式,也可称为闭包,Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
定义3:
Lambda表达式,它可以很简洁地表示一个行为或传递代码,现在你可以把Lambda表达式看作匿名功能,它基本上就是没有声明名称的方法,但和匿名类一样,它也可以作为参数传递给一个方法。
以上的定义感觉都是很抽象呢,是不是看完了还不知道什么是Lambda表达式呢? 那到底是什么是Lambda表达式呢,简单的理解就是:Lambda表达式是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。从这里我们就知道这个Lambda的读音了吧(λ->α、β,这是数学中定义常量、未知数的),读音:lan b(m) da(兰亩达)['læ;mdə]。(啊法、贝塔、兰亩达,^_^,很好记有木有)
基于上面,我们给Lambda下个定义吧:
Lambda表达式是一个匿名函数,允许把函数作为一个方法的参数传递到方法中(函数作为参数传递进方法)。
二、Lambda表达式进阶理解
接下来我们下面的例子来理解下Lambda表达式的匿名函数。
我们先看下之前版本求两个double类型的和的编码方式(代码支持左右滑动):
public double add(double first, double second) {
return first+second;
}
转换成Lambda表达式后是这个样子:
(double first,double second)->first+second;
当然这里的参数类型也是可以省略的,java编译器会通过上下文推断出来:
(first, second)->first+second;
另外我们上面并没有指定返回值,java会自动根据上下文推断出来返回值,当然我们也可以显式的指定:
(first, second)-> return first+second;
这就是传说中神奇的Lambda表达式了,理解到这里的话,那么你就已经入门了,如果你只是想简单的了解,那么看到这里就好了(O(∩_∩)O哈哈~),如果还希望在深入的去了解下怎么用的,那么就接着往下看吧。
三、Lambda语法
Lambda 表达式的语法格式如下:
(parameters) -> expression;
或者:
(parameters) ->{ statements;}
以下是lambda表达式的重要特征:
(1)可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
(2)可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
(3)可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
(4)可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
public interface Calculator {
public double operate(double x,double y);
}
接下来要开始精彩的表演了,请不要眨眼睛了。
实现加法:
Calculator addCalculator = (double x,double y)->x+y;
System.out.println(addCalculator.operate(2, 4));//输出:6.0
语法说明:类型声明:double x,double y。
实现减法:
Calculator addCalculator = (x, y)->x-y;
System.out.println(addCalculator.operate(2, 4));//输出:-2.0
语法说明:不用类型声明,代码中没有了double。
实现乘法:
Calculator mulCalculator = (x,y)->{return x*y;};
System.out.println(mulCalculator.operate(2, 4));//输出:8.0
语法说明:大括号的返回语句。
实现除法:
Calculator divCalculator = (x,y)-> x/y;
System.out.println(divCalculator.operate(2, 4));//输出:0.5
语法说明:没有大括号和返回语句。
全部代码:
public class Test {
public static void main(String[] args) {
Calculator addCalculator = (double x,double y)->x+y;
System.out.println(addCalculator.operate(2, 4));
Calculator subCalculator = (x,y)->x-y;
System.out.println(subCalculator.operate(2, 4));
Calculator mulCalculator = (x,y)->{return x*y;};
System.out.println(mulCalculator.operate(2, 4));
Calculator divCalculator = (x,y)-> x/y;
System.out.println(divCalculator.operate(2, 4));
}
}
以上就是Lambda表达式的简单使用了,不知道你领会到了没有!
五、Lambda表达式总结
通过本章,要知道什么是Lambda表达式,Lambda表达式的基本语法是什么。
Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。Lambda表达式对于我们开发而言,真的是一把很好的瑞士军刀,利用这把瑞士军刀的话,在编码的时候一定会如虎添翼。
不知道你是否已经领悟到了Lambda的奥妙,下一篇我们将通过实战的方式来让你爽一下!