如何在Java迭代期间更新List <employee>的名称

时间:2018-11-29 06:19:15

标签: java java-8

我有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拥有2个角色Admin和standard,因此第一次它会使用employee.setrole(rs.getString(“ RoleName”))设置角色,但是第二次我需要在同一员工中添加角色。我该怎么做。

1 个答案:

答案 0 :(得分:0)

对于初学者来说,在更新结果集时,我将使用Map而不是列表,以在更新角色之前在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"));
    }
}