java - 优化获取助手id的Java代码
问题描述
要求:我有一个文件,我需要将与其经理对应的助理员工 ID 添加到数据库中。所以在文件中我得到了助手的登录 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(), ""));
});
}
推荐阅读
- automation - 我在哪里可以运行 terraform?
- continuous-deployment - 如何尽快用 Gitflow 进程同时部署几个关键 bug?
- macos - 升级到 Mojave 后,使用 hudson 对 jenkins 进行 Git 身份验证失败
- html - 媒体查询未正确调整
- quantlib - 如何在 QuantLib 中建立通胀期限结构?
- mongodb - $geoNear 查询后过滤时的性能
- mysql - MySql 从查询中获取第一个和最后一个结果
- html - CSS中有没有一种方法可以防止寡妇,而不必使用额外的HTML?
- maven - 传递依赖不能正常工作
- python - 如何使用 Python3 和 ANTLR4 修改 java 源代码?