sOlOHsU's Blogβ

灯火阑珊处

Java 8 简明教程(2): Lambda Expression

Lambda 表达式

先来看一个对字符串数组进行排序的例子,在之前的Java版本中,我们通常这样来实现:

1
2
3
4
5
6
7
8
 List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");

  Collections.sort(names, new Comparator<String>() {
      @Override
      public int compare(String a, String b) {
          return b.compareTo(a);
    }
});

静态方法Collections.sort接受一个数组和一个比较器来对这个数组进行排序。因而我们经常需要创建一个匿名的比较器并把它传递给sort方法。

为了避免整天没完没了的创建匿名对象,Java 8使用了一种更简洁的语法,lambda表达式:

1
2
3
 Collections.sort(names, (String a, String b) -> {
      return b.compareTo(a);
});

可以看到代码比以前短了不少并且变得更加易读。但是它还能变得更短:

1
 Collections.sort(names, (String a, String b) -> b.compareTo(a));

如果方法中只有一行语句,可以省略大括号和return关键字。但是,这还没完:

1
 Collections.sort(names, (a, b) -> b.compareTo(a));

Java编译器会自动进行参数类型检查,所以这些我们也可以省略掉。接下来我们将更深入的讲解一下lambda表达式更广泛的用途。