2014-01-31 2 views
0

У меня есть следующий код:Перебор две коллекции с двумя петлями

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.

EDIT: Объект a и объект d имеют одинаковый тип объектов (например Person). getM() - простой getter, который возвращает имя объекта. getB() - простой приемник, который возвращает номер телефона объекта. 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

Вы собираетесь должны предоставить гораздо больше информации. Например, что возвращает getM(), getC() и getB()? Был ли equals() переопределен для того, что возвратит эти функции? –

+0

Он добавит объект toPrint в случае, если getM & getB равен, но getC не является eqal – Kick

+0

, пожалуйста, напишите полный синтаксический код ошибки, который помогает больше всего на свете. Пункт 1: Нет заявления о печати! пункт2: 'toPrint' двойная кавычка отсутствует! – Helios

ответ

0

Я предполагаю, что переменная different является коллекция тоже. В этом случае, вы может быть в состоянии сделать это:

if (!different_apns.contains(toPrint) { //only print/add if it does NOT contain 
    System.out.println(toPrint); 
    different_apns.add(toPrint); 
} 
Смежные вопросы