我有以下代码:
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);
}
}
}
}
问题是:代码只打印不相同的元素,而不是打印所有正在比较的记录。此外,我对象具有相同的C
和C
属性,但程序仍会打印它们,即使它们是相同的。
如何只打印不同且仅一次的元素?它基本上打印了它所做的每一次比较。
我将所有内容保存到一个集合中,我摆脱了重复,但它不是很好的解决方案。应该有一种方法只打印具有不同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
答案 0 :(得分:0)
我假设变量different
也是集合。在这种情况下,您可能能够执行此操作:
if (!different_apns.contains(toPrint) { //only print/add if it does NOT contain
System.out.println(toPrint);
different_apns.add(toPrint);
}