【Java8】Lamda表达式

1. 匿名内部类

Lamda表达式,读作λ表达式,属于函数式编程范畴,目的是简化匿名内部类的实现。

先看看原来的匿名内部类是如何实现的。

interface SimpleSay {
    void sayHi(String name);
}
public static void main(String[] args) {
    // 传统匿名内部类实现方式
    String myName = "lucy";
    test(
        new SimpleSay() {
            @Override
            public void sayHi(String name) {
                System.out.println("Hello "+name);
            }
        }
    , myName);
}

static void test(SimpleSay simpleSay, String name){
    simpleSay.sayHi(name);
}

如果使用Lamda表达式,就简单多了。

//lamda表达式
test(name -> {System.out.println("Hello "+name);}, myName);

2. Lamda语法

  1. 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  2. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  3. 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  4. 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
(parameters) -> expression
或
(parameters) ->{ statements; }

3. Lamda示例

3.1 数学运算

public static void main(String[] args) {
    //Lamda完整写法
    MathOperation add = (int a, int b) -> {return a + b;};
    //参数类型可以省略
    MathOperation sub = (a, b) -> {return a - b;};
    //只有一个参数,可以省略圆括号
    MathOperation2 pow = a -> {return (a*a);};
    //只有一条语句,可以省略大括号
    MathOperation3 mul = (a, b) -> System.out.println("a * b = " + (a*b));
    //只是一个表达式,可以省略 return 关键字
    MathOperation div = (a, b) -> a / b ;

    System.out.println("a + b = " + test(6, 3,add));
    System.out.println("a - b = " + test(6, 3,sub));
    System.out.println("a^2 = " + test2(6,pow));
    test3(6, 3,mul);
    System.out.println("a / b = " + test(6, 3,div));
}

interface MathOperation{ int operate(int a, int b); }
interface MathOperation2{ int operate(int a); }
interface MathOperation3{ void operate(int a, int b); }

static int test(int a,int b, MathOperation math) {return math.operate(a, b);}
static int test2(int a,MathOperation2 math) {return math.operate(a);}
static void test3(int a, int b,MathOperation3 math) {math.operate(a, b);}

文章作者: 叶遮沉阳
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叶遮沉阳 !
  目录