Java8中List的排序

1、基本类型的List集合的排序

    public void testListSort() {
        List<Long> idList = new ArrayList<>();
        idList.add(23L);
        idList.add(22L);
        idList.add(20L);
        idList.add(21L);
        System.out.println(idList);

        //java8 before
        idList.sort(new Comparator<Long>() {
            @Override
            public int compare(Long o1, Long o2) {

                if (o1.longValue() < o2.longValue()) {
                    return -1;
                } else if (o1.longValue() > o2.longValue()) {
                    return 1;
                }
                return 0;
            }
        });

        System.out.println(idList);

        //java8
        List<Long> sortIdList = idList.stream().sorted(Long::compareTo).collect(Collectors.toList());
        System.out.println(sortIdList);

        //java8
        List<Integer> integerList = Arrays.asList(0, 3, 2, 1);
        Collections.sort(integerList, Integer::compareTo);
        System.out.println(integerList);
    }
### Java 8List排序的方法 #### 使用`Comparator.reversed()`方法进行倒序排序 对于希望按照特定字段逆向排序的情况,在Java 8中可以通过流操作来简化这一过程。例如,有一个包含多个`Person`对象的列表,这些对象具有名称属性。为了按名字降序排列此列表,可以采用如下方式: ```java import java.util.*; import java.util.stream.Collectors; class Person { private String name; public Person(String name){ this.name = name; } public String getName(){ return name; } @Override public String toString() { return "Person{name='" + name + "'}"; } } public class Main { public static void main(String[] args) { List<Person> persons = Arrays.asList(new Person("Alice"), new Person("Bob")); List<Person> sortedList = persons.stream() .sorted(Comparator.comparing(Person::getName).reversed()) .collect(Collectors.toList()); System.out.println(sortedList); } } ``` 这段代码展示了如何利用`stream().sorted()`配合`Comparator.comparing()`以及`.reversed()`完成对`persons`列表基于姓名属性的降序排序[^1]。 #### 利用`Collections.sort()`方法及其变体 当处理的是实现了`Comparable`接口的对象或者是想要自定义比较逻辑时,则可借助于`Collections.sort()`函数。该方法允许传入一个单独的`List<T>`参数或是带有额外定制化`Comparator`的一组参数。这使得即使是在不支持自然顺序的数据结构上也能灵活地实施各种形式的排序策略[^2]。 #### 多级排序组合 有时候可能需要先依据某项标准排序后再根据另一些条件进一步调整位置关系。比如在一个员工记录集中先后依照年龄升序再按名字字典序整理成员次序。此时应该这样编写代码片段: ```java import java.util.*; class Employee { private int age; private String name; // 构造器、getter/setter 和其他辅助方法... @Override public String toString() { return "Employee{age=" + age + ", name='" + name + "'}"; } } public class MultiSortExample { public static void main(String[] args) { List<Employee> employees = ... ;// 初始化employee列表 Collections.sort( employees, Comparator.comparing(Employee::getAge) .thenComparing(Employee::getName)); employees.forEach(System.out::println); } } ``` 上述例子说明了通过链式调用来构建复杂的多层排序规则[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值