我的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);
}
示例答案:
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类 对于这样的动物 所有作品都很好。但是我如何使用像泛型这样的通用的东西,因为不要复制和粘贴每个具有相同数据的时间类,其中只更改了最后一个字段? 我期待这样的事情,但它并没有工作 填充变量: 也许我做错了什么?