Lambda
- Lambda表达式的结构:( ) -> { };
- 注意: Lambda要求实现的接口中只有一个方法;
- 简化:当方法体只有一个语句的时候,{}可以省略;另外,return关键字也被省略了,原因是编译器会认为,既然只有一个语句,那么这个语句执行的结果就应该是返回值,所以return也就不需要了。同理,当参数只有一个的时候,小括号也是可以省略的.
Comparator
在Java 8之前,对集合进行排序要为Comparator创建一个匿名内部类用来排序:
new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
return xxx;
}
}
Java8后,可以使用Lambda表达式,并且Comparator接口新增了方法.
-
使用Lambda表达式
Arrays.sort(rectangles,(a,b)-> (int)(a.getArea() - b.getArea()));
-
使用静态方法的引用
Arrays.sort(rectangles,Utility::compare);
-
提取Comparator
Arrays.sort(rectangles,Comparator.comparing(Rectangle::getArea));
-
反转排序
Arrays.sort(rectangles,Comparator.comparing(Rectangle::getArea).reversed());
-
多条件组合排序
Arrays.sort(rectangles,Comparator.comparing(Rectangle::getArea).reversed().thenComparing(Rectangle::getWidth));