在Java中,可以使用流(Stream API)来处理文件数据并进行排序。以下是一个示例代码,展示如何读取文件内容、解析数据,并按照总分从高到低进行排序。如果总分相同,则按学号从小到大排序。
import java.io.BufferedReader; // 导入BufferedReader类,用于高效地读取文本文件
import java.io.FileReader; // 导入FileReader类,用于读取字符文件
import java.io.IOException; // 导入IOException类,用于处理输入输出异常
import java.util.ArrayList; // 导入ArrayList类,用于创建动态数组
import java.util.Comparator; // 导入Comparator接口,用于定义排序规则
import java.util.List; // 导入List接口,用于处理列表
// 定义一个Student类,用于存储学生信息
class Student {
private String id; // 学生学号
private String name; // 学生姓名
private int classNumber; // 班级编号
private int mathScore; // 数学成绩
private int chineseScore; // 语文成绩
private int englishScore; // 英语成绩
private int totalScore; // 总分
// Student类的构造函数,用于初始化学生信息
public Student(String id, String name, int classNumber, int mathScore, int chineseScore, int englishScore, int totalScore) {
this.id = id;
this.name = name;
this.classNumber = classNumber;
this.mathScore = mathScore;
this.chineseScore = chineseScore;
this.englishScore = englishScore;
this.totalScore = totalScore;
}
// Getter方法,用于获取学生信息
public String getId() { return id; }
public String getName() { return name; }
public int getClassNumber() { return classNumber; }
public int getMathScore() { return mathScore; }
public int getChineseScore() { return chineseScore; }
public int getEnglishScore() { return englishScore; }
public int getTotalScore() { return totalScore; }
// 重写toString方法,用于返回学生信息的字符串表示形式
@Override
public String toString() {
return String.format("%s\t%s\t%d\t%d\t%d\t%d\t%d", id, name, classNumber, mathScore, chineseScore, englishScore, totalScore);
}
}
// 定义SortStudents类,包含main方法
public class SortStudents {
public static void main(String[] args) {
String filePath = "score.txt"; // 文件路径,指向score.txt文件
List<Student> students = new ArrayList<>(); // 创建一个ArrayList,用于存储Student对象
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { // 尝试打开文件并创建BufferedReader对象
String line;
// 跳过表头
br.readLine();
while ((line = br.readLine()) != null) { // 逐行读取文件内容
String[] data = line.split("\t"); // 使用制表符分割每一行,得到数据数组
// 解析数据数组,创建Student对象,并添加到students列表中
String id = data[0];
String name = data[1];
int classNumber = Integer.parseInt(data[2]);
int mathScore = Integer.parseInt(data[3]);
int chineseScore = Integer.parseInt(data[4]);
int englishScore = Integer.parseInt(data[5]);
int totalScore = Integer.parseInt(data[6]);
students.add(new Student(id, name, classNumber, mathScore, chineseScore, englishScore, totalScore));
}
} catch (IOException e) { // 捕获并处理IOException异常
e.printStackTrace();
}
// 使用流进行排序
students.stream() // 创建students列表的流
.sorted(Comparator // 定义排序规则
.comparingInt(Student::getTotalScore).reversed() // 首先按照总分降序排序
.thenComparing(Student::getId)) // 如果总分相同,则按照学号升序排序
.forEach(System.out::println); // 打印排序后的学生信息
}
}
score.txt文件内容如下图片

对score.txt内数据进行排序后结果截图;

2495

被折叠的 条评论
为什么被折叠?



