比较2个不同对象列表的多个字段

时间:2017-11-10 05:02:08

标签: java list stream compare

我有两个对象,都有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,但我想不出在这种情况下使用的方法。非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用:

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());// && ...
}