【发布时间】: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);
}
}
}
}
问题是: 代码打印所有正在比较的记录,而不是只打印不相同的元素。我也有相同的对象的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
【问题讨论】:
-
您将不得不提供更多信息。例如,getM()、getC() 和 getB() 返回什么?无论这些函数返回什么,equals() 都被覆盖了吗?
-
如果 getM & getB 相等但 getC 不相等,它将添加 toPrint 对象
-
请发布完整的无语法错误代码,这比任何事情都更有帮助。 point1:没有打印语句! point2:
toPrint双引号丢失! -
对象没有getM()、getC(),请检查是否正确覆盖了M类、B类和C类中的equals方法
-
你想做什么?你想看看这两个集合是否包含相同顺序的相同元素吗?还是相同的元素,无论它们的顺序如何?您要打印的具体是什么对?
标签: java collections