Как обновить имя List <Employee>во время итерации в Java - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть объект List employeeList и набор результатов обхода, а затем добавление сведений о сотруднике в employeeList. Если тот же сотрудник пришел во время перемещения, необходимо добавить его роли с существующим атрибутом.

while(rs.next()){
   ListIterator<Employee> itr = employeeList.listIterator();
   while (itr.hasNext()) {
     if(employeeList.getId() == rs.getLong("ID"))){
       // need to append roles in employee
     }
   }
}

Я хочу добавить роль всотрудник, если тот же сотрудник в наборе результатов.Например: сотрудники Ram имеют две роли: администраторскую и стандартную, поэтому 1-й раз он устанавливает роль с помощью employee.setrole (rs.getString ("RoleName")), но 2-й раз мне нужно добавить роль в том же самом сотруднике.Как я могу это сделать.

1 Ответ

0 голосов
/ 29 ноября 2018

Для начала я бы использовал карту, а не список при просмотре набора результатов для поиска сотрудников по id перед обновлением роли.

Map<Integer, Employee> empMap = employeeList.stream().collect(Collectors.toMap(e -> e.getId(), e));

while (rs.next) {
    Employee e = empMap.get(rs.getLong("ID"));
    if (e != null) {
        String role = rs.getString("RoleName");
        if (e.getRoleName() == null) {
             e.setRoleName(role));
        } else {
            e.setRoleName(e.getRole() + ", " + role);
        }
    }
}

Если возможно, лучше добавить роль.Назовите функциональность в методе класса Employee

public void addRoleName(String role) {
    if (this.role == null) {
        this.role = role;
    } else {
        this.role +=  ", " + role;
    }
}

, что упрощает цикл

while (rs.next) {
    Employee e = empMap.get(rs.getLong("ID"));
    if (e != null) {
        e.addRoleName(rs.getString("RoleName"));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...