【问题标题】:List of duplicate java objects with one different field/property具有一个不同字段/属性的重复 java 对象列表
【发布时间】:2021-08-11 22:46:02
【问题描述】:

我的数据库返回给我一个重复的 java 对象列表,其中只有一个属性不同,即当然。 例如对于 1 名学生:2 个不同课程的 2 个学生对象。 我创建了一个模型类,我想在其中填充来自 db 的学生对象。 对于模型类中的课程,我创建了字符串列表。

所以对于每个学生: 我想将其课程添加到列表中并填充模型的其他字段

学生班:

public class Student {

    private String name;
    private int id;
    private String email;
    private String course;
}

StudentModel类:

public class StudentModel {
    private String name;
    private int id;
    private String email;
    private List<String> course;

}

我有:

Student student1("Tom",1,"tom@email.com","JAVA");
Student student2("Tom",1,"tom@email.com","DSA");
Student student3("JERRY",2,"jerry@email.com","C#");

我想要这样的东西:

StudentModel{name='TOM', id=1, email='TOM@email.com', course=[JAVA, DSA]}
StudentModel{name='Jerry', id=2, email='jsk@email.com', course=[C#]}

我正在尝试这样:

        List<String> course = new ArrayList<>();

        int id = studentList.get(0).getId();
        studentModel=new StudentModel();

       for(Student student : studentList){

            if(id == student.getId()){
                course.add(student.getCourse());
                studentModel.setCourse(course);
            }
            else {
                id = student.getId();
                //studentModel.setCourse(course);
                course.clear();
                course.add(student.getCourse());
                StudentModel studentModel = new StudentModel();
                studentModel.setCourse(course);
         }
            studentModels.add(studentModel);
        }

还有什么方法可以做到这一点?

【问题讨论】:

  • 目前你所有的结果都使用一个共同的列表。不要那样做。为每个学生创建单独的列表。无论如何,假设 Student#id 对于代表一个特定学生的所有对象都是相同的,您可以按 ID 对所有这些对象进行分组,然后处理每个组以创建课程列表。
  • 是的,尝试过这种方式,谢谢。

标签: java oop arraylist


【解决方案1】:

示例答案:

public class Student {
    private int id;
    private String name;
    private String email;
    private String course;

    public Student( int id, String name,String email, String course) {
        this.name = name;
        this.id = id;
        this.email = email;
        this.course = course;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getCourse() {
        return course;
    }

    public void setCourse(String course) {
        this.course = course;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return id == student.id;
    }



    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", email='" + email + '\'' +
                ", course='" + course + '\'' +
                '}';
    }


public class StudentModel {
    private int id;
    private String name;
    private String email;
    private Set<String> course;

    public StudentModel(int id) {
        this.id = id;
    }

    public StudentModel(int id, String name, String email) {
        this.name = name;
        this.id = id;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Set<String> getCourse() {
        return course;
    }

    public void setCourse(Set<String> course) {
        this.course = course;
    }

    public void addCourse(String course){
        if(!Objects.nonNull(this.course)){
            this.course = new HashSet<>();
        }
        this.course.add(course);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        StudentModel that = (StudentModel) o;
        return id == that.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "StudentModel{" +
                "name='" + name + '\'' +
                ", id=" + id +
                ", email='" + email + '\'' +
                ", course=" + course +
                '}';
    }
}


public class Main {

    public static void main(String[] args) {

        //This list will store the student objects which are retrieving from the database
        List<Student> studentsList = new ArrayList<>();

        //Mock values for database values
        studentsList.add(new Student(1, "Tom", "tom@email.com", "JAVA"));
        studentsList.add(new Student(1, "Tom", "tom@email.com", "DSA"));
        studentsList.add(new Student(2, "JERRY", "jerry@email.com", "C#"));

        //This list will store the student Model Objects
        List<StudentModel> studentsModelList = new ArrayList<>();

        studentsList.stream().forEach(student -> {
                    StudentModel tempStudentModel = new StudentModel(student.getId(), student.getName(), student.getEmail());
                    tempStudentModel.addCourse(student.getCourse());
                    boolean contains = false;
                    for (StudentModel temp : studentsModelList) {
                        if (temp.equals(tempStudentModel)) {
                            contains = true;
                            temp.addCourse(student.getCourse());
                        }
                    }
                    if (!contains) {
                        studentsModelList.add(tempStudentModel);
                    }

                }
        );

        System.out.println(studentsModelList);

    }

}

输出:

[StudentModel{name='Tom', id=1, email='tom@email.com', course=[JAVA, DSA]}, StudentModel{name='JERRY', id=2, email='jerry@email.com', course=[C#]}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多