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

标签 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,但我想不出在这种情况下使用的方法。任何帮助将不胜感激,谢谢。

最佳答案

你可以使用这个:

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

关于java - 比较 2 个不同对象列表的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47215940/

相关文章:

c++ - 实现观察者模式时出现问题 : "Member reference base type ________ is not a structure or union"

java - 为什么读取线程不是 "run out"?

java - 为什么很多项目只提供源码不提供jar包下载?

java - 加载只有静态方法的类

Java : How to force a given protected method to be overloaded by children classes?

java - 如何在java中将数组转换为二维数组

java - 再次用递归尝试了欧拉的#14,对我来说不起作用。剧透 欧拉 14 号

c# - 从列表中获取值

java.io.NotSerializedException : java. lang.reflect.Constructor

Java Play FrameWork 2.3 使用 jackson 返回流式 Json