gpt4 book ai didi

java - 在类日志中存储学生评价的最佳方式

转载 作者:行者123 更新时间:2023-11-29 07:29:43 25 4
gpt4 key购买 nike

假设您有一本学生评价日志。某天,每个学生在日记中都有每个科目的一些分数。有没有更好的方法来按特定日期添加学生的分数?

我试图将此数据存储在 HashMap<Student, HashMap<Subject, ArrayList<Integer>>> 中(我之前的 question )但是我觉得这种方式体积大而且效率不够。

class School {
private List<Classes> classes;

...
}

/**
* Classes contains data of school classes (students, subjects etc)
*/

class Classes {
private List<Students> students;
private List<Subjects> subjects;
private List<Teachers> teachers;

...
}

/**
* Class Mark is a collection of student marks
* Contains Mark, Subject and Date values
*/

class Mark {
private Date date;

...
}

有什么想法可以通过创建/读取/更新/删除操作更有效地存储这个吗?我很乐意获得有关如何组织这些类(class)的提示。

最佳答案

解决您问题的最简单方法是让 Mark 类具有以下字段:

public class Mark {

private Integer value;
private Date date;
private Student student;
private Subject subject;

//getters & setters
}

这将允许从任何 Collection<Mark> marks 中获取具体学生的所有分数使用过滤方法(google guave 库提供了这样的 API,使用 Java 8 更容易做到,因为它现在在 java.util.stream 中)。

不过,如果您愿意让您的数据结构中的分数已经根据具体学生排序,我建议在 Student 之间实现一个后向关系。和 Mark :

public class Student {

private Collection<Mark> marks;

//getters & setters
}

现在您对 Collection<Student> students 进行操作并可能从集合中获得具体学生的分数。

最后,如果你想对一个数据结构进行操作,其标记已经按学生和主题排序,你可以使用额外的抽象:

public class StudentPerformance {

private Student student;
private Map<Subject, List<Mark>> marks; //actually it can be implemented
//with a class as well but let's leave it as it is
//for the sake of simplicity of the example

//setters & getters
}

然后将其存储为一个集合:Collection<StudentPerformance> performances

这种解决方案的优点:

  1. 减少客户端代码的冗长
  2. 更具描述性
  3. 您使用了 Java 的主要功能之一 - 强类型。这意味着在编译时保证您的客户端代码不会接受任何非 StudentPerformance 类型的内容。它确实有助于避免大型项目中的错误。

最后,具体的解决方案始终取决于您的应用程序的需求。没有 Elixir 。

关于java - 在类日志中存储学生评价的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com