两个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):

           研究中 ......

posted @ 2020-06-06 20:06  北极的大企鹅  阅读(17817)  评论(2编辑  收藏  举报
阅读 - 79万