lambda表达式

来源:互联网 发布:淘宝帮派帮规怎么写 编辑:程序博客网 时间:2024/06/07 09:22

用途

用于传递代码块,在没有lambda表达式的时候,传递代码块必须通过构造对象传递。

形式

参数,箭头,以及一个表达式
如果代码要完成计算其无法通过一个表达式完成,则需要加入{}
如果lambda表达式没有参数,但是其必须依旧提供(),就像是无参数方法
如果lambda表达式参数的类型可以推导出来,则可以省略参数类型
如果只有一个参数,且参数类型可以推导出来,则可以省略括号

    (String first, String second) -> {        if(first.length() < second.length)            return -1;        else if(first.length > second.length)            return 1;        else            return 0;    }//无参数表达式()->{    for(int i = 0; i < 10; i++)        System.out.println(i);}

Lambda表达式的用途

用于替代函数式接口,这种接口中只有一种方法

  • 替代Comparator
 public class LambdaTest {    public static void main(String[] args) {        String[] planents = new String[] {"Merry", "Venus", "Earth", "Mars", "Jupter", "Saturn"};        System.out.println(Arrays.toString(planents));        System.out.println("Sorted:");        Arrays.sort(planents);        System.out.println(Arrays.toString(planents));        System.out.println("Sorted By Length:");        String second;        String first;        Arrays.sort(planents, (first, second)->first.length()-second.length());//函数式接口可以使用lambda表达式代替        System.out.println(Arrays.toString(planents));    }}

方法引用

有时候,现有的的方法可以完成想要传递到其他代码的某个动作,此时可以直接将方法传递过去。
格式:类名::方法名

变量作用域

  • lambda表达式的组成:

    一个代码块
    参数
    自由变量的值,指的是非参数,且不再代码块中定义的值。

  • lanbda表达式变量引用的问题

    只能引用变量不会改变的值的变量
    lambda表达式的变量的作用域的范围和嵌套体有相同的作用域,所以不能有同名变量。
    在lambda表达式中使用this关键字,这个this指的是创建这个lambda表达式的this参数。

处理lambda表达式

要接收一个lambda表达式需要一个函数式接口

    repeat(10, ()->System.out.printin("Hello World"));    public static void repeat(int n, Runnable action){        for(int i=0; i < 10; i++){            action.run();        }    }