最近公司项目里面有这样的一个sql,多表关联查询,用list封装数据拼接成一个结果集返回,但是数据库数据量很大,而且查询的sql又很复杂,这样查出来需要很长时间,所以拆成单表查询,查询结果用同样的list去封装,最后将这些list组合成一个list,一开始用list.addAll()方法,但是这个只会在原有list尾部插入list,并没有把相同属性的值合并起来,
写了一个demo解决这个问题
package com.chenyong.test_java01;
import com.chenyong.test_java01.entity.Student;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Test04 {
public static void main(String[] args) {
//两个集合合并成一个
List<Student> demo1 = getDemo1();
List<Student> demo2 = getDemo2();
System.out.println("创建第一个数据:"+demo1);
System.out.println("创建第二个数据:"+demo2);
getCombineDemo2(demo1, demo2);
System.out.println("结果集:"+demo2);
}
private static List<Student> getDemo1() {
List<Student> stuList = new ArrayList<>();
Student student = new Student();
student.setNumber("10086");
student.setName("zhangsan");
Student student2 = new Student();
student2.setNumber("10087");
student2.setName("lisi");
stuList.add(student);
stuList.add(student2);
return stuList;
}
private static List<Student> getDemo2() {
List<Student> stuList = new ArrayList<>();
Student student = new Student();
student.setNumber("10086");
student.setSex("0");
student.setWork("programmer");
Student student2 = new Student();
student2.setNumber("10087");
student2.setSex("1");
student2.setWork("programmer");
stuList.add(student);
stuList.add(student2);
return stuList;
}
private static void getCombineDemo2(List<Student> demo1, List<Student> demo2) {
HashMap<String, Student> map = new HashMap<>();
for (Student student : demo1) {
map.put(student.getNumber(), student);
}
for (Student student : demo2) {
String studentNumber = student.getNumber();
Student student1 = map.get(studentNumber);
if (student1 == null) {
continue;
}
if (student.getName()==null) {
student.setName(student1.getName());
}
if (student.getSex()==null) {
student.setSex(student1.getSex());
}
if (student.getWork()==null) {
student.setWork(student1.getWork());
}
}
}
}
本文介绍了一种解决多表查询结果合并的问题的方法。通过使用HashMap来存储第一次查询的结果,再利用第二次查询的数据进行合并,确保了数据的完整性并且提高了查询效率。
1201

被折叠的 条评论
为什么被折叠?



