public class Test {
public static void main(String[] args) {
List<Teacher> teacherList = new ArrayList<>();
Teacher t1 = new Teacher("1","zhangsan");
Teacher t2 = new Teacher("2","lisi");
teacherList.add(t1);
teacherList.add(t2);
Student s1 = new Student("1","wangwu","1");
Student s2 = new Student("2","dingliu","2");
Student s3 = new Student("3","heqi","1");
Student s4 = new Student("4","dengba","2");
List<Student> studentList = new ArrayList<>();
studentList.add(s1);
studentList.add(s2);
studentList.add(s3);
studentList.add(s4);
}
}
class Teacher{
String id;
String name;
List<Student> studentList;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudentList() {
return studentList;
}
public void setStudentList(List<Student> studentList) {
this.studentList = studentList;
}
public Teacher(String id, String name) {
this.id = id;
this.name = name;
}
}
class Student{
String id;
String name;
String teacherId;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTeacherId() {
return teacherId;
}
public void setTeacherId(String teacherId) {
this.teacherId = teacherId;
}
public Student(String id, String name, String teacherId) {
this.id = id;
this.name = name;
this.teacherId = teacherId;
}
}
题主你好,既然
teacher
和student
是一对多的关系,而且student
里是有teacherId
的属性的,那现在题主想把studentList
装进teacherList
,这个问题无非就是拆分为,怎么把studentList
按照teacherId
进行分组了提到分组,结合
stream api
,那肯定想到了Collectors.groupingBy
,所以我们直接分组得到Map<String, List<Student>>
这个
Map<String, List<Student>>
的key
就是teacherId
,而value
就是对应的studentList
了所以最后一步就很简单了,按照
teacherList
进行循环,然后从Map
中get
到对应的studentList
并set
到对应的teacher
里虽然还是做了两次循环,不过我认为这个逃脱不了,两次循环是必要的,但是两次循环没有在同一次操作中进行,是分开的,所以瞬时的资源压力不大
以上是我的想法,希望对你有所帮助╰(●’◡’●)╮