一、需求
a) 文件students.txt中包含学号、姓名、年龄和成绩
b) 读取students文件,并按照成绩降序排序
c) 若成绩相同,按年龄升序排序
二、代码
a) FileParser.java
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public classFileParser {
public List<Student>parse(){
//读文件
//将文件的每一条数据转换成学生对象
List<Student>students = newArrayList<Student>();
BufferedReaderbr = null;
try {
br = new BufferedReader(new FileReader("d:/students.txt"));
String line;
while(null != (line = br.readLine())){
String[]infos = line.split(",");//1,zhangsanfeng,23,78
//将该学习信息封装成一个学生对象
Students = new Student();
s.setId(Integer.parseInt(infos[0]));
s.setName(infos[1]);
s.setAge(Integer.parseInt(infos[2]));
s.setScore(Integer.parseInt(infos[3]));
//将学生对象存放到集合中
students.add(s);
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally{
if(null != br){
try {
br.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
return students;
}
}
b) Student.java
//实体类
public classStudent {
private int id;
private String name;
private int age;
private int score;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
}
c) StudentComparator.java
1import java.util.Comparator;
public classStudentComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
return s2.getScore() - s1.getScore() == 0
?s1.getAge() - s2.getAge()
:s2.getScore() - s1.getScore();
}
}
d) Test.java
import java.util.Collections;
import java.util.List;
public classTest {
public static void main(String[] args) {
FileParserfp = new FileParser();
List<Student>students = fp.parse();
if(null != students && !students.isEmpty()){
for(Student s : students){
System.out.println(s.getId()+"\t\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getScore());
}
}
//对集合中所有的学生按照考试分数进行降序排序 并输出
Collections.sort(students,new StudentComparator());
System.out.println("==========排序后================");
if(null != students && !students.isEmpty()){
for(Student s : students){
System.out.println(s.getId()+"\t\t"+s.getName()+"\t\t"+s.getAge()+"\t\t"+s.getScore());
}
}
}
}
三、执行结果
1 liming 22 77
2 liqian 23 80
3 yanyan 22 70
4 chenxia 21 90
5 tanwei 22 80
==========排序后================
4 chenxia 21 90
5 tanwei 22 80
2 liqian 23 80
1 liming 22 77
3 yanyan 22 70