比较和排序arraylist中的对象,java
我有一个由比较和排序arraylist中的对象,java,java,Java,我有一个由Student对象组成的ArrayList。这些对象包含名字、姓氏、实验室成绩、项目成绩、考试成绩和总成绩。我正在尝试编写一个函数,根据ArrayList中的Student对象的总成绩对其进行排序 这是我的学生课: public class Student { // fields private String firstname; private String lastname; private int labgrade; private int projectgrade; priv
Student
对象组成的ArrayList
。这些对象包含名字、姓氏、实验室成绩、项目成绩、考试成绩和总成绩。我正在尝试编写一个函数,根据ArrayList
中的Student
对象的总成绩对其进行排序
这是我的学生课:
public class Student {
// fields
private String firstname;
private String lastname;
private int labgrade;
private int projectgrade;
private int examgrade;
private int totalgrade;
// constructor
public Student(String firstname, String lastname, int labgrade,
int projectgrade, int examgrade) {
this.firstname = firstname;
this.lastname = lastname;
this.labgrade = labgrade;
this.examgrade = examgrade;
this.totalgrade = labgrade + projectgrade + examgrade;
}
// method
public String toString() {
String s = firstname + " " + lastname + " has a total grade of "
+ totalgrade;
return s;
}
public int compareTo(Student s) {
return (totalgrade = s.totalgrade);
}
下面是我试图做的排序:
private ArrayList<Student> arraylist = new ArrayList<Student>();
public void SortStudent() {
Collections.sort(arraylist);
}
private ArrayList ArrayList=new ArrayList();
公共无效SortStudent(){
Collections.sort(arraylist);
}
但这不起作用,因为它说它只能在
List
上工作,而不能在ArrayList
上工作。修复我的SortStudent
方法有什么帮助吗?ArrayList
是一个列表
,问题是Student
没有实现Comparable
,并且您没有定义compareTo
方法,这是使用集合
中的排序
方法所需要的
你可以做类似的事情:
public class Student implements Comparable<Student> {
//... the rest of the class
public int compareTo(Student s) {
return Integer.compare(this.grade, s.grade);
}
}
Collections.sort
仅适用于实现可比性的类型:
public static <T extends Comparable<? super T>> void sort(List<T> list) {...}
ArrayList
是一个列表
。您的compareTo()
是错误的<代码>totalgrade=s。totalgrade是一个赋值,而不是比较。要进行比较,请使用返回整数。比较(this.totalgrade,s.totalgrade)
。好的,我很高兴您可以实现比较到
,但这有什么帮助?您没有提供任何解释。使用comparable,您可以指定对象的比较方式实现comparable
->实现comparable
class Student implements Comparable{
int rollno;
String name;
int grade;
Student(int rollno,String name,int grade){
this.rollno=rollno;
this.name=name;
this.grade=grade;
}
public int compareTo(Object obj){
Student st=(Student)obj;
if(grade==st.grade)
return 0;
else if(grade>st.grade)
return 1;
else
return -1;
}
public static <T extends Comparable<? super T>> void sort(List<T> list) {...}
private ArrayList<Student> arraylist = new ArrayList<Student>();
...
public void SortStudent() {
arraylist.sort((x, y) -> Integer.compare(x.totalgrade, y.totalgrade));
}