1.传递代码
新建一个类,继承Comparator接口,复写compare方法。
public class AppleComparator implements Comparator<Apple> {
public int compare(Apple a1, Apple a2){
return a1.getWeight().compareTo(a2.getWeight());
}
}
inventory.sort(new AppleComparator());
2. 使用匿名内部类
使用匿名内部类,复写compare方法。
public class AppleComparator implements Comparator<Apple> {
public int compare(Apple a1, Apple a2){
return a1.getWeight().compareTo(a2.getWeight());
}
}
inventory.sort(new AppleComparator());
3.使用Lambda表达式
用Lambda表达式的不同写法及简化。
inventory.sort((Apple a1, Apple a2)
-> a1.getWeight().compareTo(a2.getWeight())
);
// Lambda从上下文,自动推断参数类型
inventory.sort((Apple a1, Apple a2)
-> a1.getWeight().compareTo(a2.getWeight())
);
//再简化,使用Comparator中的静态方法comparing。可以接受一个Function来提取Comparable键值,并生成一个Comparator对象。
Comparator<Apple> c = Comparator.comparing((Apple a) -> a.getWeight());
import java.util.Comparator.comparing;
inventory.sort(comparing((a) -> a.getWeight()));
4.使用方法引用
最简洁的书写方式。
inventory.sort(comparing(Apple::getWeight));