java8集合排序

原文https://blog.csdn.net/gao1440156051/article/details/71126194  

目录

1.普通排序

2.使用增强版的Comparator接口

3.使用lamda表达式进行排序

4.多条件排序


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;
        }
    }
    

猜你喜欢

转载自blog.csdn.net/qq_30869501/article/details/85242607