簡體   English   中英

java按對象ID比較2個列表

[英]java compare 2 list by object id

正如標題所說,我有一個問題。 我有 2 個數組。 一長是五。 另一個是七長。

即使兩個數組中的對象不同,如果數組中的對象id相同,也會判斷為同一個對象。

有很多關於javascript的答案,但似乎關於java的答案並不多。 任何遇到相同問題的人都可以分享解決方案。 如果您有任何與我的問題類似的問題,請分享。 非常感謝。

以下是我的嘗試和我的示例數據。

"7 objects of list ": [
        {
          "characterNo": "100121",
          "characterName": "막심 드 윈터",
          "manNo": "",
          "manName": "",
         
        },
        {
          "characterNo": "100122",
          "characterName": "댄버스 부인",
          "manNo": "3727",
          "manName": "옥주현",
          
        },
        {
          "characterNo": "100123",
          "characterName": "나",
          "manNo": "29655",
          "manName": "이지혜",
        
        },
        {
          "characterNo": "100124",
          "characterName": "잭 파벨",
          "manNo": "4202",
          "manName": "이창용",
         
        },
        {
          "characterNo": "100125",
          "characterName": "반 호퍼 부인",
          "manNo": "40282",
          "manName": "한유란",
         
        },
        {
          "characterNo": "100126",
          "characterName": "베아트리체",
          "manNo": "3543",
          "manName": "류수화",
         
        },
        {
          "characterNo": "100128",
          "characterName": "프랭크 크롤리",
          "manNo": "42618",
          "manName": "임정모",
         
        },
        {
          "characterNo": "100130",
          "characterName": "줄리앙 대령",
          "manNo": "31476",
          "manName": "김현웅",
         
        }
      ]

列表的 5 個對象是這個。

[
  {
    "characterNo": "100121",
    "characterName": "막심 드 윈터",
    "manName": "에녹"
  },
  {
    "characterNo": "100122",
    "characterName": "댄버스 부인",
    "manName": "옥주현"
  },
  {
    "characterNo": "100123",
    "characterName": "나",
    "manName": "임혜영"
 },
  {
    "characterNo": "100124",
    "characterName": "잭 파벨",
    "manName": "최민철"
  },
  {
    "characterNo": "100125",
    "characterName": "반 호퍼 부인",
    "manName": "김지선"
  },
  {
    "characterNo": "100126",
    "characterName": "베아트리체",
    "manName": "김경호"
  }
]

如果 manName 不同但 characterNo 相同,我想檢查兩個數組是否具有相同的元素。

我想要的是 7 個中的 2 個不相同的元素。

這是我的代碼

List<Casting> unMatchList = 7Array.stream().filter(o1 -> 5Array.stream().noneMatch(o2 -> o2.getCharacterNo().equals(o1.getCharacterNo()))).collect(
                                        Collectors.toList());

這返回

錯誤:(737, 95) java:從 lambda 表達式引用的局部變量必須是最終的或有效的最終變量

這是一個有效的代碼示例,我用它來重現您的問題並且它有效......

    class Data {
        Integer characterNo;
        String characterName;
        String manName;

        public Data(Integer characterNo, String characterName, String manName) {
            this.characterNo = characterNo;
            this.characterName = characterName;
            this.manName = manName;
        }

        public Integer getCharacterNo() {
            return characterNo;
        }

        public void setCharacterNo(Integer characterNo) {
            this.characterNo = characterNo;
        }

        public String getCharacterName() {
            return characterName;
        }

        public void setCharacterName(String characterName) {
            this.characterName = characterName;
        }

        public String getManName() {
            return manName;
        }

        public void setManName(String manName) {
            this.manName = manName;
        }

        @Override
        public String toString() {
            return "Data{" +
                    "characterNo=" + characterNo +
                    ", characterName='" + characterName + '\'' +
                    ", manName='" + manName + '\'' +
                    '}';
        }
    }

    @Test
    void getNonMatchingList() {
        var a1 = List.of(
                new Data(1,"x","a"),
                new Data(2,"x","b")
        );

        var a2 = List.of(
                new Data(1,"x","a")
        );

        var unMatchList = a1.stream().filter(o1 -> a2.stream().noneMatch(o2 -> o2.getCharacterNo().equals(o1.getCharacterNo()))).collect(
                Collectors.toList());

        unMatchList.forEach( it -> System.out.println(it));
    }

所以,你的代碼似乎工作正常......它唯一的問題是5Array變量可能不是 final 或有效 final 您可以嘗試將其聲明為 final 並且它可能會起作用。 如果沒有,請發布您得到的下一個錯誤,我們可以進行調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM