У меня есть следующий код:Foreach цикл внутри цикла Еогеасп (Java)
Set<TOrganization> organizations = new LinkedHashSet<TOrganization>();
Set<TRole> roles = new LinkedHashSet<TRole>();
StringBuilder message = new StringBuilder("Requested roles: " + "\n");
//I fill them up with names like Test org A, Test Role A 1
for(TOrganization org : organizations) {
message.append(" - " + org.getName()+ "\n");
for(TRole role : roles) {
if(role.getOrganization().equals(org)) {
message.append(" - " + role.getName()+ "\n");
}
}
}
Я хочу напечатать роли в отдельных категориях, что-то вроде этого:
"- Тест орг "
" - Тест Роль А 1"
"- Роль Тест A 2"
"- Тест орг Б"
"- Тест Роль B 1"
"- Тест Роль B 2"
Но мой код всегда добавляет название организации до роли, как это:
"- Тест орг А"
"- Тест Роль 1"
"- Тест орг A"
"- Тест Роль А 2"
"- Тест орг Б"
"- Тест Роль B 1"
"- Тест орг Б"
"- Тест Роль B 2"
Кажется message.append(" - " + org.getName()+ "\n");
запускается на выполнение, когда проходит второй цикл. Как это возможно?
Редактировать: Я тестировал его с помощью printlns, но имена ролей в порядке. Я не касался equals() или hashcode(), я просто сравниваю строки с equals(). Проблема в том, что имена org добавляются в сообщение для каждой принадлежащей им роли, когда они должны появляться только один раз.
Возможно, если у вас есть только одна роль для каждой организации. Вы правильно заменили «hashCode» и «equals»? – Kevin
Пройдите через свой код или добавьте printlns; некоторые предположения, которые вы делаете, неверны. Начните, где вы * добавите * данные. –
@Kevin Или, вернее, он переопределил 'hashcode' и' equals' неправильно? (Так как их реализация вообще не будет реализована) – CorayThan