当前位置: 首页 > 知识库问答 >
问题:

Java比较两个列表的对象值?

颜鸿云
2023-03-14

我有两个列表**ListA

MyData {
    String name;
    boolean check;
} 

ListA和ListB都包含MyData对象,现在我必须比较列表中的两个对象值,并检查变量,比如ListA是否包含这些对象值

ListA = ["Ram",true],["Hariom",true],["Shiv",true];

ListB也包含

ListB = ["Ram",true],["Hariom",true],["Shiv",true];

然后我必须比较列表并返回false,因为这两个列表是相同的,但如果ListA包含

ListA = ["Ram",true],["Hariom",true],["Shiv",false];

和ListB包含

 ListB = ["Ram",true],["Hariom",true],["Shiv",true];

然后我必须比较列表并返回true,因为两个列表都不相同

反之亦然,所以任何列表值的微小变化都必须返回true。我必须在这里提到一件事,物体可以是任意顺序的。


共有3个答案

充子航
2023-03-14

我得到了上述问题的解决方案

public boolean compareLists(List<MyData> prevList, List<MyData> modelList) {
        if (prevList.size() == modelList.size()) {
            for (MyData modelListdata : modelList) {
                for (MyData prevListdata : prevList) {
                    if (prevListdata.getName().equals(modelListdata.getName())
                            && prevListdata.isCheck() != modelListdata.isCheck()) {
                        return  true;

                    }
                }

            }
        }
        else{
            return true;
        }
        return false; 

    }

编辑:-
我们如何覆盖这个...想象一下,如果你有两个数组“A”,真“B”,真“C”,真和“A”,真“B”,真“D”,真。即使数组一有C,数组二有D,也没有检查可以捕捉到它(由@Patashu提到)...为此,我做了以下修改。

public boolean compareLists(List<MyData> prevList, List<MyData> modelList) {
        if (prevList!= null && modelList!=null && prevList.size() == modelList.size()) {
            boolean indicator = false;
            for (MyData modelListdata : modelList) {
                for (MyData prevListdata : prevList) {
                    if (prevListdata.getName().equals(modelListdata.getName())
                            && prevListdata.isCheck() != modelListdata.isCheck()) {
                        return  true;

                    }
                    if (modelListdata.getName().equals(prevListdata.getName())) {
                        indicator = false;
                        break;
                    } else
                        indicator = true;
                }
                }

            }
        if (indicator)
            return true;
    }
        }
        else{
            return true;
        }
        return false; 

    }
闾丘鸣
2023-03-14

ArrayList已经通过equals方法对此提供了支持。引用文件

... 换句话说,如果两个列表包含相同顺序的相同元素,则它们被定义为相等。

它确实要求您在MyData类中正确实现equals

编辑

您已经更新了问题,说明列表可能有不同的顺序。在这种情况下,首先对列表进行排序,然后应用equals。

锺星腾
2023-03-14

这不是最有效的解决方案,但最简洁的代码是:

boolean equalLists = listA.size() == listB.size() && listA.containsAll(listB);

@卫斯理波特是对的。如果集合中存在重复对象,上述解决方案将不起作用
对于完整的解决方案,您需要迭代集合,以便正确处理重复的对象。

private static boolean cmp( List<?> l1, List<?> l2 ) {
    // make a copy of the list so the original list is not changed, and remove() is supported
    ArrayList<?> cp = new ArrayList<>( l1 );
    for ( Object o : l2 ) {
        if ( !cp.remove( o ) ) {
            return false;
        }
    }
    return cp.isEmpty();
}

@罗埃加夫里尔是对的。return语句必须是有条件的。以上代码已更新

 类似资料:
  • 问题内容: 我有两个列表 , 都包含 MyData 类型的对象,而 MyData* 包含这些变量。 利斯塔和数组listB都包含MyData的对象,现在我要两个列表的对象值比较这里 的名字 ,以及 检查 变量一样,如果 利斯塔 包含这些对象值 和ListB也包含 然后我必须比较列表并返回false,因为两个列表相同但是如果ListA包含 和 ListB 包含 然后我必须比较列表并返回true,因为

  • 第一次来这里,所以我希望这是有意义的! 我有两个对象数组,比如l1和l2,我想在这两个列表之间进行比较,并在l3中得到一个不匹配的值。用户类包含2个字符串: 比如,l1包含:Java、JSF、JAXR、foo l2包含:JSF、JAXR 我可以对匹配的值进行比较,但不能对不匹配的值进行比较。这种逻辑似乎有缺陷。有什么帮助吗? 对于匹配值: 但是,对于不匹配,当我说不等于时,我得到的不是唯一的值,而

  • 问题内容: 我有两个列表(不是Java列表,可以说两列) 例如 我想要一个返回多少个相同元素的方法。对于此示例,它应该为3,并且应该返回列表的相似值和不同的值。 如果是,我应该使用哈希图,然后用什么方法获得结果? 请帮忙 PS:这不是学校作业:)因此,如果您只是指导我就足够了 问题答案: 编辑 这是两个版本。一种使用,另一种使用 比较它们并从中创建您自己的版本,直到获得所需的内容。 这应该足以覆盖

  • 在爪哇中。如果我们必须将一个对象与另一个对象进行比较。我们比较该对象中的每个字段。 学生 1 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。学生 2 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。因此,要检查2名学生是否相等...我们比较每个字段。 但是,如果 Student 对象有许多字段,该怎么办?学生1对象有标记1,标记2,标记3,名称,年龄,地址,颜色,类,国家,部

  • 我想断言,相同类型的两个对象列表在该对象的属性值方面是相同的。例如,我有两个Person对象列表,它们具有名字、姓氏和中间名属性。每个Person对象都有这些属性(java bean)的方法setter和getter,构造函数不包含任何参数。 让我们假设这里已经有一个名为existingPersonList的两个人的列表,该列表具有以下属性: 现有人员1:firstName=鲍勃,lastName

  • 这与Java比较两个列表的不同之处在于,我需要能够在jUnit中断言相等性,而不仅仅是比较列表。