优化获取助手ID的Java代码

问题描述

需求:我有一个文件,需要从其中添加与它的经理相对应的助理雇员ID到db中。所以在文件中,我正在获取助手的登录ID。我需要将登录ID传递给db,以便获取助手的相应员工ID并将其添加到从文件中获取的列表中。

// code for getting employee from file - returns a list

private void setAssistantEmployeeId(List<E> empFile){
    List<E> empFilter = empFile.stream().filter(emp -> emp.getLoginId()!=null).collect(Collectors.toList());
    
    String sql = "SELECT ID FROM EMPLOYEE WHERE LOGIN_ID = ";
    
    List<E> tempList = new ArrayList<>(empFilter);
    
    for(E emp : empFilter){
        tempList.addAll(jdbcTemplate.query(sql+emp.getLoginId(),(resultset,i)->{
            emp.setAssistantEmployeeId(resultset.getString("ID"));
            return emp;
        }));
    }
}

上面的代码按预期工作,但是要花很多时间才能执行。我需要一些帮助来优化此代码。有人可以帮我优化这段代码吗?

谢谢。

解决方法

private void setAssistantEmployeeId(List<E> empFile) throws SQLException {
    List<E> empFilter = empFile.stream().filter(emp -> emp.getLoginId()!=null).collect(Collectors.toList());

    //1. query all LOGIN_ID
    String sql = "SELECT ID,LOGIN_ID FROM EMPLOYEE WHERE LOGIN_ID IN (" + empFilter.stream().map(emp -> emp.getLoginId())
            .collect(Collectors.joining("','")) + ")";

    // create map[LOGIN_ID,ID]
    ResultSet rs = runQuery(sql); // execute this query in your way
    Map<String,String> id_loginId = new HashMap<>();
    while (rs.next()) {
        id_loginId.put(rs.getString("LOGIN_ID"),rs.getString("ID"));
    }

    // 3. assign ID value
    empFilter.forEach(e -> {
        e.setAssistantEmployeeId(id_loginId.getOrDefault(e.getLoginId(),""));
    });
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...