功能实现的过程中用到了map,就是拿空间换时间的解决思路。废话不多说,直接上代码
1 两个基类
1.1 Student
package com.test.list;
/**
* @author mazhen
* @className Student
* @Description 学生类
* @date 2020/11/9 15:20
*/
public class Student {
private Long id;
private String name;
private int age;
private Long classId;
private String className;
public Student(Long id, String name, int age, Long classId) {
this.id = id;
this.name = name;
this.age = age;
this.classId = classId;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Long getClassId() {
return classId;
}
public void setClassId(Long classId) {
this.classId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", classId=" + classId +
", className='" + className + '\'' +
'}';
}
}
1.2 Class
package com.test.list;
/**
* @author mazhen
* @className Class
* @Description 班级类
* @date 2020/11/9 15:24
*/
public class Class {
private Long id;
private String name;
public Class(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Class{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
2 功能实现
package com.test.list;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author mazhen
* @className ListCombine
* @Description 单层for循环将两个List根据某个相同字段来进行合并
* @date 2020/11/9 15:19
*/
public class ListCombine {
static List<Student> studentList = new ArrayList<>();
static List<Class> classList = new ArrayList<>();
static {
studentList.add(new Student(1L,"张三",18,1L));
studentList.add(new Student(2L,"李四",19,2L));
studentList.add(new Student(3L,"王五",19,3L));
classList.add(new Class(1L,"高三(1)班"));
classList.add(new Class(2L,"高三(2)班"));
classList.add(new Class(3L,"高三(3)班"));
}
public static void main(String[] args) {
System.out.println("合并前:"+ studentList);
Map<Long,Class> map = classList.stream().collect(Collectors.toMap(Class::getId, Function.identity()));
studentList.forEach(student -> {
if (map.containsKey(student.getClassId())) {
Class class1 = map.get(student.getClassId());
student.setClassName(class1.getName());
}
});
System.out.println("合并后:"+studentList);
}
}