java8 函数式编程基础--Lambda表达式 note

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mygodhome/article/details/86183332

Lambda表达式称为闭包(Closure).

Lambda表达式是实现函数式编程的基础。

函数式编程将程序代码看做数学中的函数,函数本身作为另一个函数的参数或者返回值,即高阶函数。

函数式编程强调函数的计算比指令的执行重要。

和过程化编程相比,函数式编程里,函数的计算可以随时调用。

Lambda表达式是一个匿名函数(方法)代码块,可以作为表达、方法参数和方法返回值。

形式如下:

(参数列表) ->   {

//Lambda表达式体

}

其中,Lambda表达式参数列表与接口里的方法参数列表(数据类型,参数数量)保持一致。

如果接口中有多个抽象方法,则会报错说不是函数式接口(fucnctional interface) .

但是可以添加默认方法和静态方法。

函数式接口:只有一个抽象方法的接口。

当接口中方法的列表只有一个参数时候,可以省略小括号。

当接口中方法的列表参数类型有,可以在Lambda表达式的参数列表里省略类型。

当Lambda表达式里只有一条语句,那么可以省略return和大括号。(大括号是方法体)

Lambda表达式可以修改和访问外层作用域的实例成员变量和静态成员变量、或者访问实例方法和静态方法。当访问实例成员变量/实例方法时可以使用this,在不与局部变量发生冲突的情况下可以省略this.

对于成员变量的访问,Lambda表达式与普通方法没区别,但是在访问Lambda表达式外层局部变量时候,会发生”捕捉变量“情况。在Lambda表达式中捕获变量时,会将变量变成final的。在Lambda表达式中不能修改那些捕捉的变量。

public interface B {

@FunctionalInterface

int BBBBB(int a);

}

public class A {

private int value = 10;

    piblic static  B  add() {

           int localv=20;

            B results= (a, b) -> {

                   localv++;   //编译错误

             };

      };

}

java8之后增加了双冒号"::"运算符,这个是引用,不是调用。调用是"."  P216

类型名::静态方法

实例名::实例方法

被引用方法的参数列表和返回值类型必须和函数式接口方法参数列表和方法返回一致。

猜你喜欢

转载自blog.csdn.net/mygodhome/article/details/86183332
今日推荐