Java 8 Lambda表达式

2017-02-22  本文已影响55人  DongGuangqing

Lambda 表达式是函数式编程语言。目前有Scala、Groovy、Erlang、C#、Python、Php、Java、Javascript 等都支持函数编程语言。

Java 8 Lambda 表达式语法

Parameters -> an expression
Parameters -> {expressions;};
() -> {for (int i = 0; i < 1000; i++) doSomething();};
# 编译器会根据Lambda表达式对应的函数式接口Comparator<String>进行自动推断
String []datas = new String[] {"peng","zhao","li"};;
Arrays.sort(datas,(v1, v2) -> Integer.compare(v1.length(), v2.length()));
Stream.of(datas).forEach(param -> {System.out.println(param.length());});

为什么需要Lambda ?

  1. 使用Lambda表达式可以使代码变的更加紧凑
  2. 修改方法的能力,就是函数中可以接受以函数为单元的参数,在C/C++中就是函数指针,在Java中就是Lambda表达式,例如在Java中使用集合类对一个字符串按字符串长度进行排序,代码如下所示:
public static void main(String[] args) {
    String []datas = new String[] {"peng","zhao","li"};
    Arrays.sort(datas,(v1 , v2) -> Integer.compare(v1.length(), v2.length()));
    Stream.of(datas).forEach(param -> System.out.println(param));
}

Lambda 的目标类型: 函数式接口

Java 是面向对象编程的语言, 在java 中lambda表达式不能脱离目标类型存在,这个目录类型就是函数式接口。 如在下面的代码中,可以将Lambda表达式赋值给comp函数接口变量

Comparator<String> comp = (v1,v2) -> Integer.compare(v1.length(), v2.length());

函数式接口具有两个主要特征,是一个接口,这个接口具有唯一的一个抽像方法,我们将满足这两个特性的接口称为函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口

上一篇 下一篇

猜你喜欢

热点阅读