Java List sort() 排序

sortjava.util.List接口的默认方法。

List的排序方法在Java 8中被引入。

排序方法接受比较器作为参数,并根据指定的比较器对这个列表进行排序。

 default void sort(Comparator<? super E> c)

示例代码:

import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;

public class ListSort {

    private static Student zs = new Student("张三", 38, "156****6549");
    private static Student ls = new Student("李四", 28, "138****4267");
    private static Student ww = new Student("王五", 20, "186****7391");
    private static Student zs2 = new Student("张三", 26, "172****6549");
    private static Student ww2 = new Student("王五", null, "196****7391");

    public static void main(String[] args) {

        List<Student> studentList = Arrays.asList(zs, ls, ww, zs2, ww2);

        Collator collator = Collator.getInstance(Locale.CHINA);
        // 按照姓名排序
        Comparator<Student> nameComparator = Comparator.comparing(Student::getName, collator);
        // 正序
        studentList.sort(nameComparator);
        // 倒序
        studentList.sort(nameComparator.reversed());
        System.out.println("************姓名****************");
        studentList.forEach(System.out::println);

        // 年龄排序(空值最前)
        studentList.sort(Comparator.comparing(Student::getAge, Comparator.nullsFirst(Integer::compareTo)));
        System.out.println("************年龄****************");
        studentList.forEach(System.out::println);

        // 手机号前三位排序
        studentList.sort(Comparator.comparing(student -> student.getPhoneNum().substring(0, 3)));
        System.out.println("************手机号****************");
        studentList.forEach(System.out::println);

        // 多字段排序(按姓名,再按年龄)
        studentList.sort(Comparator.comparing(Student::getName, collator).
                thenComparing(Student::getAge, Comparator.nullsLast(Comparator.naturalOrder())));
        System.out.println("************多字段****************");
        studentList.forEach(System.out::println);

    }

    public static class Student {

        /**
         * 姓名
         */
        private String name;

        /**
         * 年龄
         */
        private Integer age;

        /**
         * 手机号
         */
        private String phoneNum;

        public Student(String name, Integer age, String phoneNum) {
            this.name = name;
            this.age = age;
            this.phoneNum = phoneNum;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getAge() {
            return age;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        public String getPhoneNum() {
            return phoneNum;
        }

        public void setPhoneNum(String phoneNum) {
            this.phoneNum = phoneNum;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", phoneNum='" + phoneNum + '\'' +
                    '}';
        }
    }

}


排序结果:

************姓名****************
Student{name='张三', age=38, phoneNum='156****6549'}
Student{name='张三', age=26, phoneNum='172****6549'}
Student{name='王五', age=20, phoneNum='186****7391'}
Student{name='王五', age=null, phoneNum='196****7391'}
Student{name='李四', age=28, phoneNum='138****4267'}
************年龄****************
Student{name='王五', age=null, phoneNum='196****7391'}
Student{name='王五', age=20, phoneNum='186****7391'}
Student{name='张三', age=26, phoneNum='172****6549'}
Student{name='李四', age=28, phoneNum='138****4267'}
Student{name='张三', age=38, phoneNum='156****6549'}
************手机号****************
Student{name='李四', age=28, phoneNum='138****4267'}
Student{name='张三', age=38, phoneNum='156****6549'}
Student{name='张三', age=26, phoneNum='172****6549'}
Student{name='王五', age=20, phoneNum='186****7391'}
Student{name='王五', age=null, phoneNum='196****7391'}
************多字段****************
Student{name='李四', age=28, phoneNum='138****4267'}
Student{name='王五', age=20, phoneNum='186****7391'}
Student{name='王五', age=null, phoneNum='196****7391'}
Student{name='张三', age=26, phoneNum='172****6549'}
Student{name='张三', age=38, phoneNum='156****6549'}

Java中的List是一种有序的集合,可以存储重复的元素。List中的元素可以通过索引访问,而且可以根据需要动态地调整List的大小。sort()方法是List接口中的一个方法,可以对List中的元素进行排序sort()方法有多种实现方式,可以使用Collections类的sort()方法、List接口自己的sort()方法或者Stream流的sort()方法。其中,Collections类的sort()方法是最常用的一种方式,可以对List中的元素进行升序排序或者降序排序。如果需要对自定义的对象进行排序,可以使用Comparator接口来实现自定义的比较器。 下面是一个使用Collections类的sort()方法对List进行排序的例子: ``` List<Integer> numList = new ArrayList<>(); numList.add(999); numList.add(123); numList.add(456); numList.add(66); numList.add(9); Collections.sort(numList); //使用Collections类的方法排序 System.out.println(numList); ``` 输出结果为:[9, 66, 123, 456, 999] 如果需要对自定义的对象进行排序,可以使用Comparator接口来实现自定义的比较器。下面是一个使用Comparator接口对Person对象进行排序的例子: ``` List<Person> personList = new ArrayList<>(); personList.add(new Person(1, 30, "北京")); personList.add(new Person(2, 20, "西安")); personList.add(new Person(3, 40, "上海")); Collections.sort(personList, new Comparator<Person>() { @Override public int compare(Person p1, Person p2) { return p2.getAge() - p1.getAge(); } }); System.out.println(personList); ``` 输出结果为:[Person(id=3, age=40, name=上海), Person(id=1, age=30, name=北京), Person(id=2, age=20, name=西安)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值