原文https://blog.csdn.net/gao1440156051/article/details/71126194
目录
1.普通排序
Collections.sort(voList);
//逆序
voList.sort(comparing(Apple::getWeight).reversed());
2.使用增强版的Comparator接口
- 匿名内部类
voList.sort(new Comparator<Apple>() {
@Override
public int compare(Apple o1, Apple o2) {
return o1.getWeight() - o2.getWeight();
}
});- 传递代码
Collections.sort(voList, new PriceOrderByComparator1());- 直接采用接口本身
voList.sort(new PriceOrderByComparator1())
实现Comparator带上泛型,省去类型转换的麻烦
public class PriceOrderByComparator1 implements Comparator<SupplierUnitPriceListBySupplierIdVO> {
@Override
public int compare(SupplierUnitPriceListBySupplierIdVO o1, SupplierUnitPriceListBySupplierIdVO o2) {
return cr;
}
}
Collections.sort(humans, Comparator.comparing(Human::getName));
3.使用lamda表达式进行排序
- 普通型
humans.sort((Human h1, Human h2) -> h1.getName().compareTo(h2.getName()));- 简化型
humans.sort((h1, h2) -> h1.getName().compareTo(h2.getName()));- lamda表达式也可以使用静态方法的引用代替
public static int compareByNameThenAge(Human lhs, Human rhs) {
if (lhs.name.equals(rhs.name)) {
return lhs.age - rhs.age;
} else {
return lhs.name.compareTo(rhs.name);
}
}
humans.sort(Human::compareByNameThenAge);
4.多条件排序
- 使用lamda表达式
List<Human> humans = new ArrayList<>();
humans.add(new Human("Sarah", 10));
humans.add(new Human("Jack", 12));
humans.add(new Human("Jack", 10));humans.sort((lhs, rhs) -> {
if (lhs.getName().equals(rhs.getName())) {
return Integer.compare(lhs.getAge(), rhs.getAge());
} else {
return lhs.getName().compareTo(rhs.getName());
}
});- 使用Comparator进行组合
humans.sort(Comparator.comparing(Human::getName).thenComparing(Human::getAge));- 自定义Comparator
public class PriceOrderByComparator1 implements Comparator<SupplierUnitPriceListBySupplierIdVO> { @Override public int compare(SupplierUnitPriceListBySupplierIdVO o1, SupplierUnitPriceListBySupplierIdVO o2) { int cr = 0; int a = HikPinYInUtils.getFirstSpell(o1.getTaskTypeStr()).compareTo(HikPinYInUtils.getFirstSpell(o2.getTaskTypeStr())); if (a != 0){ return a; }else { int b = HikPinYInUtils.getFirstSpell(o1.getProvinceStr()).compareTo(HikPinYInUtils.getFirstSpell(o2.getProvinceStr())); if (b != 0){ return b; }else { int c = HikPinYInUtils.getFirstSpell(o1.getCityStr()).compareTo(HikPinYInUtils.getFirstSpell(o2.getCityStr())); if (c != 0){ return c; }else { int d = HikPinYInUtils.getFirstSpell(o1.getAreaStr()).compareTo(HikPinYInUtils.getFirstSpell(o2.getAreaStr())); if (d != 0){ return d; }else { cr = HikPinYInUtils.getFirstSpell(o1.getBusinessName()).compareTo(HikPinYInUtils.getFirstSpell(o2.getBusinessName())); } } } } return cr; } }