【发布时间】:2019-11-24 19:46:18
【问题描述】:
我有数组列表
Arraylist<Class> arraylist = new Arraylist<>();
类包含不同的元素,如姓名、年龄、卷号。
我想对这个数组列表进行排序并使用
Collections.sort(arraylist);
并得到一个错误我怎样才能用卷号对这个数组列表进行排序。在安卓工作室中。
【问题讨论】:
标签: java android sorting arraylist
我有数组列表
Arraylist<Class> arraylist = new Arraylist<>();
类包含不同的元素,如姓名、年龄、卷号。
我想对这个数组列表进行排序并使用
Collections.sort(arraylist);
并得到一个错误我怎样才能用卷号对这个数组列表进行排序。在安卓工作室中。
【问题讨论】:
标签: java android sorting arraylist
您需要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());
做同样事情的另一种方法是在Class 类中实现Comparable 接口:
class Class implements Comparable<Class> {
public String name;
@Override
public int compareTo(Class o) {
return name.compareTo(o.name);
}
}
然后调用:
Collections.sort(arraylist);
【讨论】:
您可以使用 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;
}
}
【讨论】:
您的班级,例如在排序之前应该是可排序的。 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));
【讨论】: