Collections.sort对象排序针对多个属性
时间: 2023-08-17 11:09:49 浏览: 259
要对多个属性进行排序,可以使用Java的Comparator接口来实现自定义的排序逻辑。下面是一个示例代码,演示如何使用Comparator对对象的多个属性进行排序:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Main {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 30));
persons.add(new Person("Charlie", 20));
// 使用Comparator进行排序
Collections.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
// 先按名字升序排序
int result = p1.getName().compareTo(p2.getName());
if (result != 0) {
return result;
}
// 若名字相同,则按年龄降序排序
return Integer.compare(p2.getAge(), p1.getAge());
}
});
// 打印排序结果
for (Person person : persons) {
System.out.println(person);
}
}
}
```
在上述代码中,我们创建了一个Person类,其中包含了name和age两个属性。然后我们创建了一个List来存储Person对象,并添加了几个示例对象。
接下来,我们使用Collections.sort方法对List进行排序,传入了一个实现了Comparator接口的匿名内部类。在compare方法中,我们首先按照name属性升序排序,如果name相同,则按照age属性降序排序。
最后,我们遍历排序后的List,并打印结果。
在实际使用时,你可以根据自己的需求修改compare方法中的排序逻辑,以适应不同的对象属性排序要求。
阅读全文