在Java中,对集合进行自定义排序可以通过以下几种方式实现:
实现`Comparable`接口
自定义类需要实现`Comparable`接口,并重写`compareTo`方法来定义排序规则。
```java
class Student implements Comparable
String name;
int score;
int age;
Student(String name, int score, int age) {
this.name = name;
this.score = score;
this.age = age;
}
@Override
public int compareTo(Student other) {
// 根据score排序
int scoreComparison = Integer.compare(this.score, other.score);
if (scoreComparison != 0) {
return scoreComparison;
}
// 如果score相同,根据age排序
return Integer.compare(this.age, other.age);
}
}
List
students.add(new Student("张三", 89, 20));
students.add(new Student("李四", 60, 21));
students.add(new Student("路人", 99, 15));
Collections.sort(students);
for (Student student : students) {
System.out.println(student);
}
使用`Comparator`接口
可以创建一个实现`Comparator`接口的匿名内部类或lambda表达式来定义排序规则。
```java
List
fruits = new ArrayList<>(); fruits.add("apple");
fruits.add("banana");
fruits.add("orange");
// 使用匿名内部类
Collections.sort(fruits, new Comparator
() { @Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
// 使用lambda表达式
Collections.sort(fruits, (o1, o2) -> o1.compareTo(o2));
System.out.println(fruits);
多重排序
如果需要根据多个属性进行排序,可以创建多个`Comparator`,然后使用`Collections.sort`方法进行多次排序。
```java
// 假设有一个FSUData类,包含属性A和属性B
class FSUData {
String airport;
String city;
// 构造函数、getter和setter省略
}
List
// 添加数据
// ...
// 创建多个Comparator
Comparator
Comparator
// 先按属性A排序,再按属性B排序
Comparator
// 使用compositeComparator进行排序
Collections.sort(fsuData, compositeComparator);
// 输出排序后的结果
for (FSUData data : fsuData) {
System.out.println(data);
}
以上方法可以帮助你根据不同的业务规则对Java集合中的元素进行自定义排序。请根据你的具体需求选择合适的方法