可能的重复:
根据名称对联系人列表进行排序?
我有一个学生对象,然后创建arraylist并将学生添加到列表中。
ArrayList<Student_Object> studentsList = new ArrayList<>();
现在,我想对StudentId Fleid的清单进行排序。我该怎么办?
有更好的解决方案吗?谢谢
所以我在学生_object类中有这种方法
类是:
class Student_Object implements Comparator<Student_Object>
该方法是:
public int compare(Student_Object student1, Student_Object student2){
String student1TUID = student1.getTUID();
String student2TUID = student2.getTUID();
return student1TUID.compareTo(student2TUID);
}
从哪里运行陈述?
Collections.sort(studentsList);
如果我从主班上运行它,我会在Netbeans中获得错误:
no suitable method found for sort(ArrayList<Student_Object>)
method Collections.<T#1>sort(List<T#1>,Comparator<? super T#1>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)
method Collections.<T#2>sort(List<T#2>) is not applicable
(inferred type does not conform to declared bound(s)
inferred: Student_Object
bound(s): Comparable<? super Student_Object>)
where T#1,T#2 are type-variables:
T#1 extends Object declared in method <T#1>sort(List<T#1>,Comparator<? super T#1>)
T#2 extends Comparable<? super T#2> declared in method <T#2>sort(List<T#2>)
----
(Alt-Enter shows hints)
让它起作用。我使用 collections.sort(sustemelList,new Student_object());
谢谢大家
一种方法是:
编写comparator
和覆盖compare
方法。然后通过传递比较器使用collections.sort()。
示例:
class StudentComparator implements Comparator<Student> {
public int compare(Student stud1, Student stud2){
int stu1ID = stud1.getId();
int stu2ID = stud2.getId();
if(stu1ID > stu2ID)
return 1;
else if(stu1ID < st21ID )
return -1;
else
return 0;
}
}
另一种口味可能是:
class StudentComparator implements Comparator<Student> {
public int compare(Student stud1, Student stud2){
int stu1ID = stud1.getId();
int stu2ID = stud2.getId();
return stud1ID-stu2ID;
}
}
本教程可能会为您提供帮助。
要进行排序,您需要实现Comparable
接口。我还强烈建议您在那里时实现平等和哈希码。示例:
public class Student implements Comparable
{
private String name;
private int id;
...
public int compareTo(Student otherStudent)
{
if(this.id < otherStudent.id)
{
return -1;
}
else if(this.id > otherStudent.id)
{
return 1;
}
else{
return 0;
}
}
}