【问题标题】:Iterating over two collections with two loops用两个循环迭代两个集合
【发布时间】:2014-01-31 13:39:16
【问题描述】:

我有以下代码:

for (Object a : collection1) {
    for (Object d : collection2) {
        if (a.getM().equals(d.getM())
                && a.getB().equals(d.getB())) {
            if (!a.getC().equals(d.getC())) {
                String toPrint = "This is different  :a.getC() + d.getC() !";
                System.out.println(toPrint);
                different.add(toPrint);
            }
        }
    }
}

问题是: 代码打印所有正在比较的记录,而不是只打印不相同的元素。我也有相同的对象的CC 属性,但即使它们相同,程序也会打印它们。

我怎样才能只打印不相同的元素并且只打印一次?它基本上会打印出它所做的每一个比较。

我将所有内容保存到一个集合中,并删除了重复项,但这不是一个好的解决方案。应该有一种方法可以只打印具有不同getC() 的对象。另外我最大的问题是它打印的对象与C 具有相同的值。

编辑: 对象a 和对象d 是相同类型的对象(比如Person)。 getM() 是简单的 getter,它返回对象的名称。 getB() 是简单的 getter,它返回对象的电话号码。 equals 未被覆盖。它就像您通常使用的那样使用它。

这是程序的真实代码和真实输出:

for (Apn a : aosp_mms_settings)
for (Apn d : db_mms_settings) {
    if (a.getMcc().equals(d.getMcc())
            && a.getMnc().equals(d.getMnc())) {

        if (!a.getApn().equals(d.getApn())) {

            String toPrint = "[MCC: " + a.getMcc() + " MNC: "
                    + a.getMnc() + " OTHER MCC" + d.getMcc()
                    + " OTHER MNC : " + d.getMnc() + "]"
                    + " < APN: " + a.getApn() + ">" + "Other APN:"
                    + d.getApn();

            System.out.println(toPrint);
            different_apns.add(toPrint);
        }

[MCC: 206 MNC: 20 OTHER MCC206 OTHER MNC : 20] < APN: mms.base.be>Other APN:mms.be
[MCC: 206 MNC: 20 OTHER MCC206 OTHER MNC : 20] < APN: mms.base.be>Other APN:mms.be
[MCC: 206 MNC: 20 OTHER MCC206 OTHER MNC : 20] < APN: mms.base.be>Other APN:mms.be
[MCC: 206 MNC: 20 OTHER MCC206 OTHER MNC : 20] < APN: mms.base.be>Other APN:mms.be
[MCC: 206 MNC: 20 OTHER MCC206 OTHER MNC : 20] < APN: mms.base.be>Other APN:mms.be
[MCC: 206 MNC: 20 OTHER MCC206 OTHER MNC : 20] < APN: mms.base.be>Other APN:mms.be
[MCC: 206 MNC: 20 OTHER MCC206 OTHER MNC : 20] < APN: mms.base.be>Other APN:mms.be

【问题讨论】:

  • 您将不得不提供更多信息。例如,getM()、getC() 和 getB() 返回什么?无论这些函数返回什么,equals() 都被覆盖了吗?
  • 如果 getM & getB 相等但 getC 不相等,它将添加 toPrint 对象
  • 请发布完整的无语法错误代码,这比任何事情都更有帮助。 point1:没有打印语句! point2:toPrint 双引号丢失!
  • 对象没有getM()、getC(),请检查是否正确覆盖了M类、B类和C类中的equals方法
  • 你想做什么?你想看看这两个集合是否包含相同顺序的相同元素吗?还是相同的元素,无论它们的顺序如何?您要打印的具体是什么对?

标签: java collections


【解决方案1】:

我假设变量different 也是一个集合。在这种情况下,您可能可以这样做:

if (!different_apns.contains(toPrint) { //only print/add if it does NOT contain
    System.out.println(toPrint);
    different_apns.add(toPrint);
}

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 2018-02-08
    • 2021-08-09
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2021-12-07
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多