美文网首页
Java 8 新特性——Lambda

Java 8 新特性——Lambda

作者: 无量儿 | 来源:发表于2018-09-20 10:41 被阅读0次
1. Lambda简介

“Lambda 表达式”(lambda expression)是Java 8 中一个重要的新特性,Lambda表达式基于数学中的 λ 演算得名,是一个匿名函数,即没有函数名的函数。在Java 中,无需实现接口即可使用接口中的方法,使用它设计的代码会更加简洁,虽然看着很先进,但Lambda 表达式的本质只是一个“语法糖”。
例如抽象方法:
public abstract int sum(int a, int b);
翻译成为 Lambda:
(int a, int b) -> { return a + b; }

Java当中使用 Lambda 表达式的前提是:必须有“函数式接口”。
概念:有且仅有一个抽象方法的接口,叫做函数式接口。

如何才能万无一失地检测一下当前接口是不是函数式接口呢?
用一个固定的格式写在public interface之前一行即可:

@FunctionalInterface
public interface 函数式接口名 {
    // ...
}

Lambda 表达式要想使用,一定要有函数式接口推断环境

  • 要么通过方法的参数类型来确定是哪个函数式接口
  • 要么通过赋值操作来确定是哪个函数式接口

Lambda 的格式就是为了将抽象方法,翻译成为以下三点:

  • 一些参数(方法参数)
  • 一个箭头
  • 一些代码(方法体,大括号)

举栗如下:

public static void main(String[] args) {
    // 调用方法的时候,参数类型是函数式接口,所以 Lambda 可以推断出来是哪个接口
    method((int a, int b) -> { return a + b; });
    // 也可以根据赋值语句左侧的类型来进行 Lambda 上下文推断
    Calculator param = (int a, int b) -> { return a + b; };
    method(param);
}
2. Lambda 如何简写?

在 Lambda 表达式当中,凡是可以推导的,都是可以省略的:
1)Lambda 表达式当中的参数类型可以省略不写。
2)如果参数有且仅有一个,那么小括号可以省略。
3)如果语句只有一个,那么大括号、分号和 return 也可以省略。

举栗如下:

@FunctionalInterface
public interface MyInter {
     public abstract int singlePlus(int m);
}
public static void main(String[] args) {
    // 标准格式
    method((int x) -> { return ++x; });
    // 省略参数类型
    method((x) -> { return ++x; });
    // 省略参数小括号
    method(x -> { return ++x; });
    // 省略大括号和 return 关键字
    method(x -> ++x);
}
public static void method(MyInter myInter) {
    System.out.println(myInter.singlePlus(10));
}

相关文章

网友评论

      本文标题:Java 8 新特性——Lambda

      本文链接:https://www.haomeiwen.com/subject/zrbbnftx.html