我有两个对象,都需要比较 4 个相似的字段,我从不同的来源获取它们作为对象列表。我想确保两个列表中至少有一个匹配的对象,因为它们具有完全相同的字段。问题是它们可以有不同的顺序。我有这段代码,其中有两个 for 循环
for(Object1 object1 : list1){
bool match = false;
for(Object2 object2 : list2){
if(object1.getField1().equal(object2.getField1()) && etc etc..){
match = true;
break;
}
}
if(!match)
return false
}
return true;
基本上,我遍历所有 list2 以查看是否至少有一个匹配行在 object1 中具有所有相同的字段,如果没有,则返回 false,如果有匹配的行,然后我继续下一行,直到我检查 list1 中的所有行。
我不喜欢这种检查方式,我想知道是否有更简单的方法来检查这种方式。我听说过在java 8中使用Stream,但我想不出在这种情况下使用的方法。任何帮助将不胜感激,谢谢。
你可以使用这个:
boolean isMatchs = list1.stream()
.allMatch(el1 -> list2.stream().anyMatch(el2 -> equals(el1, el2)));
使用静态方法等于如下:
static boolean equals(Object1 a, Object2 b) {
return Objects.equals(a.getField1(), b.getField1());// && ...
}