当前位置: 首页 > 知识库问答 >
问题:

具有一个不同字段/属性的重复java对象列表

沙岳
2023-03-14

我的DB返回给我一个重复的java对象列表,其中只有一个属性不同,即course。例如,针对1个学生:针对2个不同课程的2个学生对象。我创建了一个模型类,我想在其中填充来自DB的student对象。对于model class中的课程,我已经创建了字符串列表。

public class Student {

    private String name;
    private int id;
    private String email;
    private String course;
}
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);
        }

共有1个答案

傅啸
2023-03-14

示例答案:

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#]}]

 类似资料:
  • 假设我们有一个这样定义的对象A: 出于某种原因,我需要创建第二个对象B,它只具有对象A的前两个属性: 所以我的问题是:将对象A复制到对象B的最佳方法是什么?我一直在逐个复制获取者和设置者的属性,但有些事情告诉我一定有更好的方法来做到这一点!特别是当对象将具有很多属性时,我必须编写一行又一行的代码,只是为了将它们全部复制到第二个对象B... 多谢了:) 编辑:我一直被一个“另一个问题的可能重复”提醒

  • 我有一个这样的对象数组: 我希望每个人(名字)都有一个对象,并添加他们的对象。 因此,最终阵列将是: 我使用的真正数组非常大,这就是为什么我正在寻找最有效的方法。

  • Java有没有办法实现这样的目标: 而不是反复输入相同的变量名?谢谢

  • 这是我的代码: 我想将的值设置为,我该怎么做?我试过,

  • 问题内容: 我有一个对象数组,希望根据特定的对象对进行修剪。我想创建一个数组,此特定对仅包含一个对象。将重复项的哪个对象复制到新数组并不重要。 例如,我要基于的属性进行修整,创建一个仅包含每个值之一的新数组: 会成为: 是否存在会循环执行此操作的JavaScript或Angular函数? 编辑:要筛选的属性嵌套在另一个属性中。 问题答案: 您可以为此使用下划线:

  • 我有来自api的json响应,结构如下: 像这样 和其他具有相同结构的产品。 如果我为这样的人创建响应java类 对于这样的动物 所有作品都很好。但是我如何使用像泛型这样的通用的东西,因为不要复制和粘贴每个具有相同数据的时间类,其中只更改了最后一个字段? 我期待这样的事情,但它并没有工作 填充变量: 也许我做错了什么?