Lambda表达式

257 阅读1分钟

学习笔记

Lambda表达式(闭包)是Java8最重要的新特性

Lambda表达式允许把函数作为参数传递到方法中

作用:可以使代码变得简洁紧凑

语法格式:

(paramters)->expression
或
(paramters)->{statements}

特性

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但是多个参数需要。
  • 可选的大括号:如果主体只包含了一条语句,则不需要大括号。
  • 可选的返回值关键字:如果主体只有一个表达式,则编译器会自动返回值。大括号需要指定返回值

Java测试代码

ublic class LambdaTest {

    Calculation calculation = (int x, int y) -> {
        System.out.println(x + y);
    };


    //无需声明类型
    Calculation calculation2 = (x, y) -> {
        System.out.println(x + y);
        System.out.println(x - y);
    };

    //只有一个语句,可选大括号
    Calculation calculation3 = (x, y) -> System.out.println(x + y);


    //参数只有一个,可选括号,只有一个表达式,可选return关键字
    Calculation2 calculation4 = x -> x--;

    //有大括号必须显式的声明return关键字
    Calculation2 calculation5 = x -> {
        x *= x;
        return x;
    };

    public void test(){
        //lamdba表达式作为参数传递
        int x = calcaulate(10, x1 -> x1++);
    }



    public interface Calculation {
        void calculate(int x, int y);
    }

    public interface Calculation2 {
        int calculate(int x);
    }


    private int calcaulate(int x, Calculation2 calculation) {
        return x - calculation.calculate(x);
    }

}