用匿名内部类对集合中的元素实现自定义排序,要求: 1)定义学生类(学号,姓名、成绩); 2)定义集合,在集合里添加4个学生对象; 3)按照成绩从低到高进行排序; 4)如果年龄相同则按照姓名的长度进行排序。
时间: 2024-03-08 10:51:21 浏览: 68
好的,以下是一个示例代码,用匿名内部类对集合中的元素实现自定义排序:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
// 定义学生类(学号,姓名、成绩)
class Student {
private int id;
private String name;
private int score;
public Student(int id, String name, int score) {
this.id = id;
this.name = name;
this.score = 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 getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
@Override
public String toString() {
return "学号:" + id + ", 姓名:" + name + ", 成绩:" + score;
}
}
// 定义集合,在集合里添加4个学生对象
ArrayList<Student> students = new ArrayList<>();
students.add(new Student(1, "张三", 80));
students.add(new Student(2, "李四", 90));
students.add(new Student(3, "王五", 70));
students.add(new Student(4, "赵六", 90));
// 按照成绩从低到高进行排序,如果成绩相同则按照姓名的长度进行排序
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1.getScore() < s2.getScore()) {
return -1;
} else if (s1.getScore() > s2.getScore()) {
return 1;
} else {
int len1 = s1.getName().length();
int len2 = s2.getName().length();
if (len1 < len2) {
return -1;
} else if (len1 > len2) {
return 1;
} else {
return 0;
}
}
}
});
// 输出排序后的结果
for (Student student : students) {
System.out.println(student);
}
}
}
```
这里使用了 Java 的匿名内部类,实现 Comparator 接口的 compare 方法,对集合中的元素进行自定义排序。首先按照成绩从低到高排序,如果成绩相同则按照姓名的长度进行排序。最后输出排序后的结果。
阅读全文