合并有相同属性的list

本文介绍了一种解决多表查询结果合并的问题的方法。通过使用HashMap来存储第一次查询的结果,再利用第二次查询的数据进行合并,确保了数据的完整性并且提高了查询效率。

最近公司项目里面有这样的一个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());
            }

        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值