Java 对Arraylist对象排序

Java 对Arraylist对象排序,java,android,sorting,arraylist,Java,Android,Sorting,Arraylist,我有Arraylist Arraylist<Class> arraylist = new Arraylist<>(); 还有一个错误,我如何在android studio中使用卷号对该arraylist进行排序。在排序操作期间,您需要一个比较器来比较元素。一个例子是: class ClassComparator implements Comparator<Class> { @Override public int compare(Class

我有Arraylist

Arraylist<Class> arraylist = new Arraylist<>();

还有一个错误,我如何在android studio中使用卷号对该arraylist进行排序。

在排序操作期间,您需要一个
比较器来比较元素。一个例子是:

class ClassComparator implements Comparator<Class> {

    @Override
    public int compare(Class c1, Class c2) {
        // write comparison logic here like below , it's just a sample
        return c1.name.compareTo(c2.name);
    }
}


执行相同操作的另一种方法是在
Class
Class中实现
Comparable
接口:

class Class implements Comparable<Class> {

    public String name;

    @Override
    public int compareTo(Class o) {
        return name.compareTo(o.name);
    }
}

例如,您的类在排序之前应该是可排序的。Collections.sort()必须知道它应该根据什么标准对列表进行排序。除非您想要显式地实现Comparable或创建Comprator(java 8之前的老方法),否则您可以执行以下操作

class Student {
    private int rollNumber;
    private String name;

    public int getRollNumber() {
        return rollNumber;
    }

    public void setRollNumber(int rollNumber) {
        this.rollNumber = rollNumber;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
然后,您可以将列表排序为:

Collections.sort(list, Comparator.comparingInt(Student::getRollNumber));

您可以使用lambda函数(java8),它不需要您实现类似的类,而且工作做得很好

一般语法:

Collections.sort(students, (s1, s2) ->
        s1.getName().compareTo(s2.getName())); // for String values


Collections.sort(students, (s1, s2) ->
        Integer.compare(s1.getRollNumber(), s2.getRollNumber())); // for Integral values
ArrayList将是:

List<Student> students = new ArrayList<>();
Collections.sort(list, Comparator.comparingInt(Student::getRollNumber));
Collections.sort(students, (s1, s2) ->
        s1.getName().compareTo(s2.getName())); // for String values


Collections.sort(students, (s1, s2) ->
        Integer.compare(s1.getRollNumber(), s2.getRollNumber())); // for Integral values
List<Student> students = new ArrayList<>();
class Student{
    String name;
    int rollNumber;

    public String getName(){
        return name;
    }

    public int getRollNumber(){
        return rollNumber;
    }
}