好吧,這一直困擾着我,也許我失去了一些東西。Java枚舉新列表創建不按預期方式工作
我有一個枚舉類型列表,我試圖刪除重複項。在下面的代碼中,我無法創建一個新列表,因爲列表在迭代過程中被清空。
任何人都可以發現問題。
List<UserRole> newList = new ArrayList<UserRole>();
for (UserRole userRole: originalList)
{
boolean found = false;
logger.trace("size of new list: check1 = "+newList.size()); <-- size resets to 0
for (UserRole newRole: newList)
{
logger.trace("check "+userRole.name()+ " with "+newRole.name());
if (StringUtils.equals(newRole.name(),userRole.name()))
{
found = true;
break;
}
}
if (!found)
{
newList.add(userRole);
logger.trace("size of new list check2= "+newList.size());
}
}
return newList;
的UserRole的枚舉類看起來像
public enum UserRole {
SYSADMIN,
ADMIN,
STUDENT,
TEACHER,
PRINCIPAL;
public String value() {
return name();
}
public static UserRole fromValue(String v) {
return valueOf(v);
}
}
跟蹤日誌
20:20:22.291 TRACE 44 removeDuplicates - size of new list check1 = 0
20:20:22.291 TRACE 57 removeDuplicates - checking duplicate passed for role = SYSADMIN
20:20:22.291 TRACE 59 removeDuplicates - size of new list check2 = 1
20:20:22.295 TRACE 44 removeDuplicates - size of new list check1 = 0
20:20:22.295 TRACE 57 removeDuplicates - checking duplicate passed for role = SYSADMIN
20:20:22.295 TRACE 59 removeDuplicates - size of new list check2 = 1
20:20:22.296 TRACE 44 removeDuplicates - size of new list check1 = 0
20:20:22.296 TRACE 57 removeDuplicates - checking duplicate passed for role = SYSADMIN
20:20:22.296 TRACE 59 removeDuplicates - size of new list check2 = 1
20:20:22.298 TRACE 44 removeDuplicates - size of new list check1 = 0
20:20:22.298 TRACE 57 removeDuplicates - checking duplicate passed for role = SYSADMIN
20:20:22.298 TRACE 59 removeDuplicates - size of new list check2 = 1
此代碼的工作。問題必須在別處。 http://ideone.com/T2WryH –