java根据对象id比较2列表



正如标题所说,我有一个问题。我有2个数组。一个长度等于五个。另一个长七个。

即使两个数组中的对象不同,如果数组中的物体具有相同的id,也会被判断为具有相同的物体。

关于javascript有很多答案,但关于java似乎没有太多答案。任何有同样问题的人都可以分享解决方案。如果你有任何与我的问题类似的问题,请分享。非常感谢。

以下是我的尝试和样本数据。

"maxCastings"
[
{
"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个对象就是这个。

"castings"
[
{
"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 = maxCastings.stream().filter(o1 -> castings.stream().noneMatch(o2 -> o2.getCharacterNo().equals(o1.getCharacterNo()))).collect(
Collectors.toList());

这会返回

错误:(73795(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));
}

所以,您的代码似乎工作正常。。。它唯一的问题是CCD_ 1变量可能不是最终变量或有效的最终变量。你可以试着宣布它是最终的,它很可能会起作用。如果没有,请发布您得到的下一个错误,我们可以进行调试。

最新更新