java自定义类排序

如果想对自定义的类进行自定义排序的话,这个类就必须实现Comparable或者Comparator接口。

Example:首先定义一个person类,里面有字段name和age。先按name排序,name相同在按照age排序。注:使用了Lombok插件,如何使用可以参考这篇文章:lombok插件的使用

1.1:Comparable接口
person.java

@Builder
@Data
public class Person implements Comparable {
    private String name;
    private int age;

    /**
     * 1.先比较name
     * 2.name一样比较age
     * */
    @Override
    public int compareTo(Person o) {
        int temp = this.name.compareTo(o.name);
        return temp == 0 ? this.age - o.age : temp ;
    }
    
}

测试:

@Test
    public void testComparable() {
        List personList = new ArrayList<>(
                Arrays.asList(new Person("Bob", 17),
                        new Person("Anna", 17),
                        new Person("Anna", 16)));
        System.out.println("排序前:" + personList);
        Collections.sort(personList);
        System.out.println("排序后:" + personList);
    }

1.2:Comparator接口
person1.java

@Builder
@Data
public class Person2 implements Comparator {
    private String name;
    private int age;
    
    @Override
    public int compare(Person2 o1, Person2 o2) {
        int temp = o1.name.compareTo(o2.name);
        return temp == 0 ? o1.age - o2.age : temp ;
    }
}

两个接口差别并不是特别大,
1):Comparable接口在java.lang包下,自动导入,Comparator接口在java.util包下。很多类,比如String等已经实现了Comparable接口自定义了排序规则。
2):Collections.sort()排序只针对实现Comparable接口的类

你可能感兴趣的:(java自定义类排序)