【问题标题】:Comparing multiple fields of 2 list of different objects比较2个不同对象列表的多个字段
【发布时间】:2017-11-10 05:02:08
【问题描述】:

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

【问题讨论】:

  • 您是否编写了定义每个列表中的对象的类?
  • @BillHorvath,我很困惑,你的意思是像其中一个对象的 toString 吗?还是一个类来获取列表中的每个对象?
  • 抱歉,如果不清楚。列表中的每个对象都是具有四个字段的类的实例。你写的课吗?还是来自 java.util、org.springframework 等库?

标签: java list stream compare


【解决方案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());// && ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-26
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多