Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较和排序arraylist中的对象,java_Java - Fatal编程技术网

比较和排序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));
}