兩個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):

           研究中 ......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM