【问题标题】:How to compare two different list object in java?如何在java中比较两个不同的列表对象?
【发布时间】:2011-03-12 13:49:16
【问题描述】:

我有两个类列表,例如List<Aclass> A1 和List<Bclass> b1,两个列表都包含一个常见字段。所以通过使用这个字段,我必须比较这两个列表?请问有人可以帮我吗?确保这些班级列表不同。

【问题讨论】:

  • 一个字段不同是什么意思?它是一些对象的列表,例如Person,其中name 等属性不同?提问时请尽量说得更清楚。
  • “比较”是什么意思?你想对列表或其他东西进行排序吗?
  • 还有,请不要在帖子中使用签名,它已经在这里,在帖子下方。谢谢。
  • @adarshr 字段不同意味着两个列表的类型不同

标签: java


【解决方案1】:

我不确定我是否完全理解了这个问题,但您要问的是这样的问题吗?

public boolean compare (List<AClass> listA, List<BClass> listB) {
    if (listA.size() != listB.size ()) {
         return false;
    }

    for (int i=0; i<listA.size(); i++) {
        AClass aClass = (AClass) listA.get(i);
        BClass bClass = (BClass) listB.get(i);

        // This is example for numeric comparison
        // For String, use !equals()
        if (aClass.commonField != bClass.commonField) return false;
    }

    return true;
}

两个列表都应按该 commonField 字段排序

【讨论】:

  • 感谢 Aleadam,我想我已经很接近解决方案了!!!你正确地解决了我的问题
  • @vinod:如果您认为这是解决方案,请通过单击帖子旁边的复选标记来标记它。
  • 我编辑了几个错别字。请记住,只有对列表进行了排序,这种简短而简单的方法才有效。如果类字段要公开,那么您应该确保它们不为空。更好的选择是在 AClass 和 BClass 中创建一个公共方法 compareField()
【解决方案2】:

结帐the javadoc for List.equals():

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

这里可以使用 equals 方法,当然会忽略您声明的两个列表的泛型类型。 AbstractList 的 equals 方法(ArrayList 和一堆其他列表类实现)将遍历两个列表并按顺序对每个元素调用 equals,一旦完成,它会确保两个列表中都没有任何项目.

鉴于这一切,您将能够调用 equals 方法来确定天气两个列表包含相同的元素:

List<Aclass> A1 = new ArrayList<Aclass>();
List<Bclass> b1 = new ArrayList<Bclass>();

// getElement returns a private field that can be cast to both Aclass and Bclass
A1.add(getElement());
b1.add(getElement());

if (A1.equals(b1)) {
    System.out.println("two lists are equal");
}

【讨论】:

  • @Yasir 是的,我现在不知道发生了什么事,我的键盘不正常。
  • 然后学习一些触摸打字,避免大量拼写错误;-)
猜你喜欢
  • 2021-12-03
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多