我有以下代碼:的foreach循環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");
}
}
}
我想打印出不同類別的角色,這樣的事情:
「 - 測試組織一個「
」 - 測試角色A 1"
「 - 測試角色A 2」
「 - 測試組織B」
「 - 測試角色乙1」
「 - 測試角色B 2」
但我的代碼總是附加組織名稱的角色之前,像這樣:
「 - 測試ORG A」
「 - 測試角色A 1」
「 - 測試ORG A」
「 - 測試角色A 2」
「 - 測試組織B」
「 - 測試角色乙1」
「 - 測試組織B」
「 - 測試角色B 2」
似乎message.append(" - " + org.getName()+ "\n");
在第二個循環運行時執行。這怎麼可能?
編輯:我用printlns測試了它,但角色名稱沒有問題。我沒有碰到equals()或hashcode(),我只是比較字符串與equals()。問題是組織名稱會被附加到郵件中,因爲每個角色只能出現一次。
如果您每個組織只有一個角色,則可能會出現這種情況。你是否正確地重寫了'hashCode'和'equals'? – Kevin
逐步通過您的代碼或添加printlns;你所做的一些假設是不正確的。開始你添加數據的地方。 –
@Kevin或者說,他是否不恰當地重寫'hashcode'和'equals'! (因爲沒有執行它們就沒有問題。) – CorayThan