>什么是Lambda表达式
简短的说,Lambda表达式是一种用于取代匿名类,把函数行为表述为函数式编程风格的一种匿名函数。
匿名类大家自然熟悉,上面那句话提到了“函数行为”,那么什么是函数行为?
>函数行为
假设有这样一个应用场景:计算机要通过给定的某工人的薪水计算出该工人要交纳多少税。我们有以下代码:
@FunctionalInterface
interface TaxFunction{
double tax(double salary);
}
class Computer{
public double taxing(double salary,TaxFunction func){
return func.tax(salary);
}
}
计算机计算税收,应当有一个计算方式,这个计算方式就是TaxFunction接口类中给出的抽象方法tax。之所以要设计成抽象的方法,因为针对不同的收入阶层或是企业类型,可能会有不同的税收方法。假设对于工人A,税收为其总收入salary的10%:
Computer computer = new Computer();
double hisTax = computer.taxing(251, new TaxFunction() {
@Override
public double tax(double salary) {
return salary*0.1;
}
});
这其中我们使用了一个匿名类TaxFunction并直接重写了tax方法。这个tax方法就是一种函数行为,其描述了这样一种行为:x->f(x)=x*0.1,也就是传入一个状态值x,返回经过函数f映射后的值0.1*x。
这是一种函数式编程的思想。关于函数式编程,还可以查看>这篇文章<中第一个例子辅助理解。
>短小精悍的Lambda表达式
在上面那个例子中,很容易注意到我们只为了完成 x->f(x)=x*0.1 的映射,就要new 一个匿名类 TaxFunction写上足足至少四行代码来完成这个函数行为。Java本来就以冗余被人所诟病,这样的写法虽然看上去没什么问题,但是也暴露了Java代码“又臭又长”的缺点。
而Jav