List<Map<String,Object>>自定义排序
参考文档: https://segmentfault.com/a/1190000039980921?utm_source=sf-similar-article
需求
我需要 按照 资深 > 高级 > 中级 >初级 的排序方式
并且先写 开发 然后写测试
最终排序
资深开发 > 高级开发 > 中级开发 >初级开发 > 资深测试 > 高级测试 > 中级测试 >初级测试
写入Word模板表格中
@PostMapping("/writeOneTable")
public void writeSycleOneTable(MultipartFile multipartFile) {
Map<String, Object> wordDataMap = new HashMap<String, Object>(); // 存储报表全部数据
Map<String, Object> parametersMap = new HashMap<String, Object>();// 存储报表中不循环的数据
List<UserInfoDO> userInfoDOList = userInfoMapper.listAll();
WordTemplate template = null;
FileInputStream fileInputStream = null;
FileOutputStream fos = null;
// File file = new File("C:\\Users\\18980\\Desktop\\2024年6月17日_需求开发\\简历模板.docx"); //可改成你本地模板文件所在目录
// 将上传的MultipartFile转换为File对象
File file = null; //可改成你本地模板文件所在目录
try {
file = convertMultipartFileToFile(multipartFile);
// file = new File("C:\\Users\\18980\\Desktop\\2024年6月17日_需求开发\\〖空〗简历模板以及要求_可修改.docx");
} catch (IOException e) {
throw new RuntimeException(e);
}
String picPathDir = "C:\\Users\\18980\\Desktop\\2024年7月3日_简历需求\\测试岗\\证件照\\拟派团队成员简历表\\";
String outputPath = "C:\\Users\\18980\\Desktop\\2024年7月3日_简历需求\\〖正式人员名单〗\\导出数据\\";
List<Map<String, Object>> downSurgeTable = new ArrayList<Map<String, Object>>();
for (int k = 0; k < userInfoDOList.size(); k++) {
UserInfoDO userInfoDO1 = userInfoDOList.get(k);
Map<String, Object> map = new HashMap<>();
map.put("userName", userInfoDO1.getUserName());
map.put("education", userInfoDO1.getEducation());
map.put("major", userInfoDO1.getMajor());
map.put("profCertification", userInfoDO1.getProfCertification());
map.put("workYears", userInfoDO1.getWorkYears());
map.put("title", userInfoDO1.getTitle());
map.put("jobResponse", userInfoDO1.getJobResponse());
map.put("itLevel", userInfoDO1.getItLevel());
downSurgeTable.add(map);
}
Comparator<Map<String, Object>> comparator = (a1, a2) -> {
String a1Level = (String) a1.get("itLevel");
String a2Level = (String) a2.get("itLevel");
if (a1Level.equals("资深") && a2Level.equals("高级")) {
return 1;
} else if (a1Level.equals("资深") && a2Level.equals("中级")) {
return 1;
} else if (a1Level.equals("资深") && a2Level.equals("初级")) {
return 1;
} else if (a1Level.equals("中级") && a2Level.equals("高级")) {
return -1;
} else if (a1Level.equals("中级") && a2Level.equals("资深")) {
return -1;
} else if (a1Level.equals("中级") && a2Level.equals("初级")) {
return 1;
} else if (a1Level.equals("初级") && a2Level.equals("资深")) {
return -1;
} else if (a1Level.equals("初级") && a2Level.equals("高级")) {
return -1;
} else if (a1Level.equals("初级") && a2Level.equals("中级")) {
return -1;
} else if (a1Level.equals("高级") && a2Level.equals("资深")) {
return -1;
} else if (a1Level.equals("高级") && a2Level.equals("中级")) {
return 1;
} else if (a1Level.equals("高级") && a2Level.equals("初级")) {
return 1;
}
return 0;
};
downSurgeTable.sort(comparator);
Collections.reverse(downSurgeTable); // 上面排序正好相反,用这个方法 downSurgeTable.reverse(); 没有这个方法
Map map = new HashMap();
List<Map<String, Object>> collectKF = downSurgeTable.stream().filter((map1) -> map1.get("title").toString().indexOf("开发") != -1).collect(Collectors.toList());
List<Map<String, Object>> collectCS = downSurgeTable.stream().filter((map1) -> map1.get("title").toString().indexOf("测试") != -1).collect(Collectors.toList());
collectKF.addAll(collectCS); // List 合并
wordDataMap.put("parametersMap", parametersMap);
// wordDataMap.put("writeSycleOneTable", downSurgeTable); // 整体排序
wordDataMap.put("writeSycleOneTable", collectKF); // 先开发后测试
try {
// 读取word模板
fileInputStream = new FileInputStream(file);
template = new WordTemplate(fileInputStream);
// 替换数据
template.replaceDocument(wordDataMap);
//生成文件
String outputFileName = outputPath + "writeSycleOneTable" + ".docx";
File outputFile = new File(outputFileName);
fos = new FileOutputStream(outputFile);
template.getDocument().write(fos);
} catch (Exception e) {
throw new RuntimeException(e);
}
try {
if (fileInputStream != null) {
fileInputStream.close();
}
if (fileInputStream != null) {
fileInputStream.close();
}
if (fos != null) {
fos.close();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
知识点
(1) comparator 不能少些, 一一对比只对比一次,因此需要把所有程序都写全,否则 下一步 downSurgeTable.sort(comparator); 会报错
资深 > 高级 > 中级 >初级
总共写了12种对比情况
(1) 资深 高级
(2) 资深 中级
(3) 资深 初级
(4) 中级 高级
(5) 中级 资深
(6) 中级 初级
(7) 初级 资深
(8) 初级 高级
(9) 初级 中级
(10) 高级 资深
(11) 高级 中级
(12) 高级 初级
最终 自己和自己别没写对比,就是 return 0 即可
Comparator<Map<String, Object>> comparator = (a1, a2) -> {
String a1Level = (String) a1.get("itLevel");
String a2Level = (String) a2.get("itLevel");
if (a1Level.equals("资深") && a2Level.equals("高级")) {
return 1;
} else if (a1Level.equals("资深") && a2Level.equals("中级")) {
return 1;
} else if (a1Level.equals("资深") && a2Level.equals("初级")) {
return 1;
} else if (a1Level.equals("中级") && a2Level.equals("高级")) {
return -1;
} else if (a1Level.equals("中级") && a2Level.equals("资深")) {
return -1;
} else if (a1Level.equals("中级") && a2Level.equals("初级")) {
return 1;
} else if (a1Level.equals("初级") && a2Level.equals("资深")) {
return -1;
} else if (a1Level.equals("初级") && a2Level.equals("高级")) {
return -1;
} else if (a1Level.equals("初级") && a2Level.equals("中级")) {
return -1;
} else if (a1Level.equals("高级") && a2Level.equals("资深")) {
return -1;
} else if (a1Level.equals("高级") && a2Level.equals("中级")) {
return 1;
} else if (a1Level.equals("高级") && a2Level.equals("初级")) {
return 1;
}
return 0;
};
downSurgeTable.sort(comparator);
知识点2 : List 反向排序
List downSurgeTable;
Collections.reverse(downSurgeTable); // 发现结果排序正好相反,用这个方法
// 错误写法 downSurgeTable.reverse(); 没有这个方法, 报错
知识点3 : List过滤
List<Map<String, Object>> collectKF = downSurgeTable.stream().filter((map1) -> map1.get("title").toString().indexOf("开发") != -1).collect(Collectors.toList());
List<Map<String, Object>> collectCS = downSurgeTable.stream().filter((map1) -> map1.get("title").toString().indexOf("测试") != -1).collect(Collectors.toList());
知识点4 : 2个List和并
collectKF.addAll(collectCS); // List 合并
浙公网安备 33010602011771号