Java实现CityCrime对象ArrayList按抢劫数降序排序后写入CSV文件
实现方案
你当前单独提取抢劫数值到列表排序的方式会丢失数值对应的城市关联信息,所以不需要拆分字段,直接对整个CityCrime对象列表排序即可,具体实现如下:
前置优化(可选,建议做)
给你定义的crimes列表补上泛型约束,避免后续类型操作警告,修改原有定义为:
public static ArrayList<CityCrime> crimes = new ArrayList<>();
完整的writeToFile实现代码
public static void writeToFile() throws IOException { // 1. 按robbery字段降序排序crimes列表 // Java8+ 写法 crimes.sort(Comparator.comparingInt(CityCrime::getRobbery).reversed()); // 如果是Java8以下版本,用下面这行代码替代上面的排序逻辑 /* Collections.sort(crimes, new Comparator<CityCrime>() { @Override public int compare(CityCrime c1, CityCrime c2) { // 降序排序:返回c2的robbery减c1的robbery即可 return c2.getRobbery() - c1.getRobbery(); } }); */ File csvFile = new File("Robbery.csv"); // 用try-with-resources自动管理流关闭,无需手动关流 try (FileWriter fileWriter = new FileWriter(csvFile)) { // 2. 先写入CSV表头 fileWriter.write("Robbery,City\n"); // 3. 遍历排序后的列表逐行写入 for (CityCrime crime : crimes) { String line = crime.getRobbery() + "," + crime.getCity() + "\n"; fileWriter.write(line); } } }
关键逻辑说明
- 排序规则:默认的排序逻辑是升序排序,要实现降序要么加
reversed()方法,要么在自定义比较器里把两个比较对象的顺序反过来计算差值即可。 - CSV写入注意:如果你的城市名称里包含逗号,需要给城市名前后加英文双引号包裹避免格式错乱,比如
"New York, NY",如果没有特殊字符直接拼接即可。
内容的提问来源于stack exchange,提问作者e102
相关产品推荐
相关产品推荐

