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表达式更广泛的用途。