#java #oop #arraylist
Вопрос:
Моя база данных возвращает мне список дублированных объектов java, в которых только 1 свойство отличается, т. е. курс.например, для 1 студента: 2 объекта студента для 2 разных курсов. Я создал класс модели, в котором я хочу заполнить объект student, поступающий из бд. Для курса в классе модели я создал список строк.
Итак, для каждого студента: я хочу добавить его курс в список и заполнить другие поля модели
Студенческий класс:
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. В настоящее время все ваши результаты используют один общий список. Не делай этого. Создайте отдельный список для каждого студента. В любом случае, предполагая, что идентификатор студента#одинаков для всех объектов, представляющих одного конкретного студента, вы можете сгруппировать все эти объекты по идентификатору, а затем обработать каждую группу для создания списка курсов.
2. Да, пробовал так, спасибо.
Ответ №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#]}]