[英]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.