Java 将对象列表与其他对象一起排序';s法

Java 将对象列表与其他对象一起排序';s法,java,list,sorting,stream,Java,List,Sorting,Stream,在下面的代码中,对于这样的类,如何根据从课程列表中获得的分数对学生数组列表进行排序?我的意思是,如何根据这个类的属性对一个特定类的列表进行排序,这个类是另一个类的子类 public class Student{ public ArrayList<Student> students = new ArrayList<Student>(); public ArrayList<Course> studentCourses = new ArrayLi

在下面的代码中,对于这样的类,如何根据从课程列表中获得的分数对学生数组列表进行排序?我的意思是,如何根据这个类的属性对一个特定类的列表进行排序,这个类是另一个类的子类

public class Student{
    public ArrayList<Student> students  = new ArrayList<Student>();
    public ArrayList<Course> studentCourses  = new ArrayList<Course>();
    //...
class Course{
    double score;
    
    public double getScore(){
        return this.score;
    }
    //...
}
公共班级学生{
public ArrayList students=new ArrayList();
public ArrayList studentCourses=新建ArrayList();
//...
班级课程{
双倍得分;
公众双倍得分(){
返回此.score;
}
//...
}
你的“学生”类很容易混淆。根据名称,这个类听起来似乎应该代表一个学生。但是在它里面有一个
列表
,这意味着每个
学生
对象将包含指向零个或多个其他
学生
对象的指针。这个关系代表什么?学生为什么引用num其他学生怎么样

你的“课程”课程也令人困惑,因为它只包含一个分数。如果我定义了一门大学课程,那么我会想象它将代表学校/学院/大学某一年的课程,它需要包含以下信息才能完成:

  • 课程名称
  • 课程开始的年份
  • 注册参加本课程的一组学生
  • 课程中涉及的测试/考试/评估
  • 每个学生在课程中取得的总分或成绩
如果这是一个家庭作业练习,并且你保持简单,那么你可能会忽略个别的测试/考试/评估以及开学那一年。但是你仍然需要决定一种方法,将总分数映射到每个学生

假设您创建了一个代表单个学生的“学生”类(并将您的学生数据库类重命名为“学生”),那么您只需在“课程”类中创建一个
Map
(如果您的分数只是数值,您可以使用
Map
)但是请注意,如果使用
Student
对象作为
Map
键,则需要覆盖“Student”类中的
equals
hashcode
方法,以便它们能正确工作。区分人(可能有相同姓名、出生日期等)的最佳方法就是在每个学生注册时给他们分配一个序列号。所以你的“学生”类可以简单地包含一个ID序列号为的
long
字段,然后你的
equals
hashcode
方法只需检查并使用这个唯一值

或者,您可能更愿意在“学生”类中添加地图,
map
,以便每个学生跟踪其课程分数。您选择的内容将取决于您的应用程序访问分数的最频繁方式(获取每个学生的课程分数或每个课程的学生分数,或两者兼而有之)

但总的来说,你创建的每个类都需要表示一件事,你需要准确地决定什么。然后你需要决定每个类需要哪些字段才能完全表示那件事。

你的“学生”类很容易混淆。根据名称,这个类听起来似乎应该代表一个学生。但是在它里面有一个
列表
,这意味着每个
学生
对象将包含指向零个或多个其他
学生
对象的指针。这个关系代表什么?学生为什么引用num其他学生怎么样

你的“课程”课程也令人困惑,因为它只包含一个分数。如果我定义了一门大学课程,那么我会想象它将代表学校/学院/大学某一年的课程,它需要包含以下信息才能完成:

  • 课程名称
  • 课程开始的年份
  • 注册参加本课程的一组学生
  • 课程中涉及的测试/考试/评估
  • 每个学生在课程中取得的总分或成绩
如果这是一个家庭作业练习,并且你保持简单,那么你可能会忽略个别的测试/考试/评估以及开学那一年。但是你仍然需要决定一种方法,将总分数映射到每个学生

假设您创建了一个代表单个学生的“学生”类(并将您的学生数据库类重命名为“学生”),那么您只需在“课程”类中创建一个
Map
(如果您的分数只是数值,您可以使用
Map
)但是请注意,如果使用
Student
对象作为
Map
键,则需要覆盖“Student”类中的
equals
hashcode
方法,以便它们能正确工作。区分人(可能有相同姓名、出生日期等)的最佳方法就是在每个学生注册时给他们分配一个序列号。所以你的“学生”类可以简单地包含一个ID序列号为的
long
字段,然后你的
equals
hashcode
方法只需检查并使用这个唯一值

或者,您可能更愿意在“学生”类中添加地图,
map
,以便每个学生跟踪其课程分数。您选择的内容将取决于您的应用程序访问分数的最频繁方式(获取每个学生的课程分数或每个课程的学生分数,或两者兼而有之)


但总体信息是,您创建的每个类都需要表示一件事,您需要准确地确定什么。然后您需要确定每个类需要哪些字段才能完全表示该事。

是的,您的问题没有显示您尝试了什么以及问题所在。
列表为什么在Studen中t课?谢谢你的关注,如果你能来,我真的很高兴