使用两个循环迭代两个集合

时间:2014-01-31 13:39:17

标签: java collections

我有以下代码:

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

1 个答案:

答案 0 :(得分:0)

我假设变量different也是集合。在这种情况下,您可能能够执行此操作:

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