我有一個Dto列表,由'用戶名'和'技能'組成。例如: userName:「John」,skills:5拼接arraylist Java和組第二部分
如果有超過5個元素(所以5個用戶),我想保留前五位,並將另一個名稱分組在一起('其他' )和一項技能(所有技能的總和)。我想過使用子列表方法,創建兩個臨時數組,將第二個數組的dto分組併合併到主Arraylist中。 這是我的代碼,但它不起作用。爲什麼?
final List<MyDto> usersData = mydao.getUsers();
List<MyDto> result = new ArrayList<MyDto>();
if (usersData != null && usersData.size() > 0) {
List<MyDto> tmpFirstFiveUsers = new ArrayList<MyDto>();
List<MyDto> tmpOthers = new ArrayList<MyDto>();
if(usersData.size() > 5) {
// Save first 5 users
tmpFirstFiveUsers = usersData.subList(0, 5);
// Save others
tmpOthers = usersData.subList(5, usersData.size());
// Sum of 'others' skill
int skills = 0;
for (MyDto other : tmpOthers) {
skills += other.getSkills();
}
String other = "Altro";
MyDto emptyDto = new MyDto();
emptyDto.setUserName(other);
emptyDto.setSkills(skills);
tmpOthers.clear();
tmpOthers.add(emptyDto);
}
result.clear();
result.addAll(tmpFirstFiveUsers);
result.addAll(tmpOthers);
更新: 我不能做正確的子表,這是行不通的。 我還舉一個例子來理解: usersData:
- 用戶名: 「A」,技能: 「2」
- 用戶名: 「B」,技能: 「1」
- 用戶名:「C 」,技能: 「5」
- 用戶名: 「d」,技能: 「5」
- 用戶名: 「E」,技能: 「5」
- 用戶名: 「F」,技能: 「5」
- userName:「g」,技能:「5」
- 用戶名: 「H」,技能: 「5」
- 用戶名: 「我」,技能: 「5」
我的預期是什麼: usersData:
- 用戶名: 「一」,技能: 「2」
- 用戶名: 「b」,技能: 「1」
- 用戶名: 「C」,技能: 「5」
- 用戶名: 「d」,技能:「5 「
- 用戶名: 「E」,技能: 「5」
- 用戶名: 「其他」,技能: 「20」
'不work' - 記得要具體有關。你得到了什麼?如果可能的話,你期望什麼? – Thomas
最後3條語句應該在'if'條件中,否則'tmpFirstFiveUsers'和'tmpOthers'將會是空列表。 – Braj
順便說一句,如果你的列表包含5個或更少的用戶'tmpFirstFiveUsers'將是空的 - 至少這就是你的代碼所表示的。 – Thomas