zoukankan      html  css  js  c++  java
  • 两个List合并,List集合中的对象根据某个相同的属性,合并另外属性

    • 简介 (Introduction):
      • 背景
        需要对数据进行拼接,拼接的数据是存在两个不同的表中,但是,拼接后要作为一个对象显示,但是,这样的对象又是多个的.
      •  结构图
        数据库模型
        id name
        10086 zhangsan
        10087 lisi
    id work
    10086 teacher
    10087 programmer

                       需要结果

    id name work
    10086 zhangsan

    teacher

    10087 lisi

    programmer

    • 核心
      因为是在不同的数据库里,所以不能使用sql联合查询,所以只能采用List封装数据和另一个List封装数据拼接成一个结果集

    • 快速上手(Getting Started)

      1.创建测试数据

       1 private static List<SameOr> getDemo1() {
       2 
       3 
       4         List<SameOr> sameOrList = new ArrayList<>();
       5 
       6         SameOr sameOr = new SameOr();
       7         sameOr.setNumber("10086");
       8         sameOr.setName("zhangsan");
       9 
      10         SameOr sameOr2 = new SameOr();
      11         sameOr2.setNumber("10087");
      12         sameOr2.setName("lisi");
      13 
      14         sameOrList.add(sameOr);
      15         sameOrList.add(sameOr2);
      16 
      17         return sameOrList;
      18 
      19     }
      View Code
       1 private static List<SameOr> getDemo2() {
       2 
       3 
       4         List<SameOr> sameOrList = new ArrayList<>();
       5 
       6         SameOr sameOr = new SameOr();
       7         sameOr.setNumber("10086");
       8 
       9         sameOr.setSex("0");
      10         sameOr.setWork("programmer");
      11 
      12         SameOr sameOr2 = new SameOr();
      13         sameOr2.setNumber("10087");
      14         sameOr2.setSex("1");
      15         sameOr2.setWork("programmer");
      16 
      17 
      18         sameOrList.add(sameOr);
      19         sameOrList.add(sameOr2);
      20 
      21         return sameOrList;
      22 
      23     }
      View Code
      2.创建核心方法
      由于业务跑在线程里,所以,不建议(基本不适用)双重for循环,所以,这里采用Map方式
       1 private static void getCombineDemo2(List<SameOr> demo1, List<SameOr> demo2) {
       2         HashMap<String, SameOr> map = new HashMap<>();
       3 
       4         for (SameOr sameOr : demo1) {
       5             map.put(sameOr.getNumber(), sameOr);
       6         }
       7 
       8 
       9         for (SameOr sameOr : demo2) {
      10             String sameOrNumber = sameOr.getNumber();
      11             SameOr sameOr1 = map.get(sameOrNumber);
      12             if (sameOr1 == null) {
      13                 continue;
      14             }
      15 
      16             if (StringUtils.isBlank(sameOr.getName())) {
      17                 sameOr.setName(sameOr1.getName());
      18             }
      19 
      20             if (StringUtils.isBlank(sameOr.getSex())) {
      21                 sameOr.setSex(sameOr1.getSex());
      22             }
      23 
      24             if (StringUtils.isBlank(sameOr.getWork())) {
      25                 sameOr.setWork(sameOr1.getWork());
      26             }
      27 
      28 
      29         }
      30 
      31     }
      View Code

      3、测试结果

       1         //两个数组合并成一个
       2         List<SameOr> demo1 = getDemo1();
       3         List<SameOr> demo2 = getDemo2();
       4 
       5 
       6         System.out.println("创建第一个数据:"+new Gson().toJson(demo1));
       7 
       8         System.out.println("创建第二个数据:"+new Gson().toJson(demo2));
       9 
      10         getCombineDemo2(demo1, demo2);
      11 
      12         System.out.println("结果集:"+new Gson().toJson(demo2));
      View Code

      4、结果展示
      创建第一个数据:

       1 [
       2     {
       3         "number":"10086",
       4         "name":"zhangsan"
       5     },
       6     {
       7         "number":"10087",
       8         "name":"lisi"
       9     }
      10 ]
      View Code

      创建第二个数据:

       1 [
       2     {
       3         "number":"10086",
       4         "work":"programmer",
       5         "sex":"0"
       6     },
       7     {
       8         "number":"10087",
       9         "work":"programmer",
      10         "sex":"1"
      11     }
      12 ]
      View Code
      结果集:
       1 [
       2     {
       3         "number":"10086",
       4         "name":"zhangsan",
       5         "work":"programmer",
       6         "sex":"0"
       7     },
       8     {
       9         "number":"10087",
      10         "name":"lisi",
      11         "work":"programmer",
      12         "sex":"1"
      13     }
      14 ]
      View Code
    •  环境设置 (Prerequisite):

      • 环境
        JDK1.8
      • 配置
        IDEA 2019
      • 存在问题
        暂无

    •  进阶篇 (Advanced):

               研究中 ......

  • 相关阅读:
    ORM和JDBC
    四种会话跟踪技术以及jstl介绍
    GC、进程和线程的定义
    数组和链表的理解,及各自的优缺点
    JSP和Servlet及浏览器与tomcat交互过程
    多线程、同步实现方法及Error和Exception的区别与联系
    Eclipse创建一个普通maven项目详细步骤
    Eclipse创建一个动态maven项目详细步骤
    Myeclipse项目出现红叉解决方案
    数据结构和算法 — 平衡二叉树的实现
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/13056213.html
Copyright © 2011-2022 走看看