我们来看一段老版本的示例代码,其对一个含有字符串的集合进行排序:(示例代码创建了一个匿名内部类作为入参。)
// Collections 工具类提供了静态方法 sort 方法,入参是一个 List 集合,和一个 Comparator 比较器,以便对给定的 List 集合进行 排序。
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);
}
});
// Lambda 表达
Collections.sort(names, (String a, String b) -> {
return b.compareTo(a);
});
// 对于只包含一行方法的代码块,我们可以省略大括号,直接 return 关键代码即可
Collections.sort(names, (String a, String b) -> b.compareTo(a));
// List 集合现在已经添加了 sort 方法。而且 Java 编译器能够根据类型推断机制判断出参数类型,这样,你连入参的类型都可以省略
names.sort((a, b) -> b.compareTo(a));
什么条件下才能使用 lambda 表达式:
上面的例子中,从一开始的 “匿名内部类” 的形式 new Comparator<String>() {... ...}
,到后面的 “lambda表达式” (String a, String b) -> {... ...}
。之所以能这样转变,是因为 Comparator 是一个 “函数式接口”(只包含一个抽象方法的接口)。
网上关于 lambda的使用条件给出的说法如下,请做参考