排序Arraylist对象

时间:2019-07-16 06:14:53

标签: java android sorting arraylist

我有Arraylist

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

类包含不同的元素,例如名称,年龄,卷编号。

我想对该数组列表进行排序并使用

Collections.sort(arraylist);

并得到一个错误,我该如何用滚动号对该数组列表进行排序。在android studio中。

3 个答案:

答案 0 :(得分:1)

在排序操作期间,您需要Comparator<Class>来比较元素。一个例子可能是:

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

然后将比较器用作

Collections.sort(arraylist, new ClassComparator());



做同一件事的另一种方法是在Comparable类中实现Class接口:

class Class implements Comparable<Class> {

    public String name;

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

然后致电:

Collections.sort(arraylist);

答案 1 :(得分:0)

您的课程,例如在排序之前应该可以排序。对于Collections.sort()来说,必须知道应该按照什么标准对列表进行排序。除非您要明确实现Comparable或创建Compratator(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));

答案 2 :(得分:0)

您可以使用lambda函数(Java 8),该函数不需要您实现Comparable类并且可以正确完成工作。

常规语法:

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<>();

这是给班上的人

    class Student{
       String name;
       int rollNumber;
       public String getName(){
             return name;
       }

       public int getRollNumber(){
             return rollNumber;
       }
     }