Java如何将分组排序后的员工Map数据输出为指定格式定长文本
实现方案
你只需要保证分组的嵌套Map有序,再按层级遍历取出员工对象拼接字段,最后写入文件即可,完整实现代码如下:
import java.io.BufferedWriter; import java.io.FileWriter; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.stream.Collectors; public class SortData { public static void main(String[] args) { List<Employee> employees = Arrays.asList( new Employee("102", "300", "100", "200"), new Employee("101", "200", "80", "120"), new Employee("102", "100", "50", "50"), new Employee("103", "300", "100", "200"), new Employee("101", "200", "80", "120"), new Employee("101", "100", "50", "50")); // 分组时指定TreeMap作为存储结构,自动保证empNo、empSal按自然升序排列 Map<String, Map<String, List<Employee>>> map = employees.stream() .collect(Collectors.groupingBy( Employee::getEmpNo, TreeMap::new, // 外层员工编号有序 Collectors.groupingBy( Employee::getEmpSal, TreeMap::new, // 内层员工薪资有序 Collectors.toList() ) )); // 输出到控制台同时写入定长文件,替换下面路径为你的实际存储路径 String outputFilePath = "employee_data.txt"; try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath))) { for (Map.Entry<String, Map<String, List<Employee>>> empNoEntry : map.entrySet()) { for (Map.Entry<String, List<Employee>> empSalEntry : empNoEntry.getValue().entrySet()) { for (Employee emp : empSalEntry.getValue()) { // 四个字段无分隔符拼接 String line = emp.getEmpNo() + emp.getEmpSal() + emp.getEmpHra() + emp.getEmpPf(); // 控制台打印 System.out.println(line); // 写入文件 writer.write(line); writer.newLine(); } } } } catch (Exception e) { e.printStackTrace(); } } } class Employee { private String empNo; private String empSal; private String empHra; private String empPf; public Employee(String empNo, String empSal, String empHra, String empPf) { this.empNo = empNo; this.empSal = empSal; this.empHra = empHra; this.empPf = empPf; } // 补全getter方法 public String getEmpNo() { return empNo; } public String getEmpSal() { return empSal; } public String getEmpHra() { return empHra; } public String getEmpPf() { return empPf; } }
运行代码后控制台会输出你预期的格式,同时对应路径会生成符合要求的定长文件。
内容的提问来源于stack exchange,提问作者Codinghubby
相关产品推荐
相关产品推荐

