java中list根据对象属性排序
时间: 2023-06-12 11:08:18 浏览: 74
要对List中的对象按照某个属性进行排序,可以使用Java 8中引入的Comparator接口和Lambda表达式。假设有一个Person类,其中有name和age两个属性,我们要根据age属性对List进行排序,可以这样写:
```
List<Person> personList = new ArrayList<>();
// 添加Person对象到personList中
Collections.sort(personList, Comparator.comparing(Person::getAge));
```
这里使用了Comparator.comparing方法,它接受一个Function类型的参数,用来提取需要比较的属性,这里使用Person::getAge表示提取age属性。如果需要按照多个属性进行排序,可以链式调用comparing方法:
```
Collections.sort(personList, Comparator.comparing(Person::getName).thenComparing(Person::getAge));
```
这里先按照name属性进行排序,如果name相同再按照age属性排序。
相关问题
java对List中对象属性进行排序
可以使用Comparator接口来对List中的对象的属性进行排序,具体步骤如下:
1. 定义一个实现了Comparator接口的类,重写compare方法,在方法中比较两个对象的属性值,返回一个int值,表示比较结果。
例如,对一个Person类的年龄进行排序,可以定义一个AgeComparator类:
```
public class AgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getAge() - p2.getAge();
}
}
```
2. 在需要排序的代码中,调用Collections.sort方法,并将Comparator对象作为参数传入。
例如,对一个List<Person> list进行年龄排序,可以这样写:
```
Collections.sort(list, new AgeComparator());
```
完整示例代码:
```
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("Tom", 20));
list.add(new Person("Jerry", 18));
list.add(new Person("Mike", 25));
list.add(new Person("Alice", 22));
Collections.sort(list, new AgeComparator());
for (Person p : list) {
System.out.println(p.getName() + " " + p.getAge());
}
}
static 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;
}
}
static class AgeComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p1.getAge() - p2.getAge();
}
}
}
```
输出结果:
```
Jerry 18
Tom 20
Alice 22
Mike 25
```
java根据list中的对象多个属性排序
要根据List中对象的多个属性排序,可以使用Comparator接口和lambda表达式来实现。以下是一个示例代码:
假设有一个Student类,有两个属性:name和score
```java
public class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
```
现在我们有一个List<Student>,要根据name和score两个属性排序,可以这样写:
```java
List<Student> students = new ArrayList<>();
students.add(new Student("Tom", 80));
students.add(new Student("Jerry", 90));
students.add(new Student("Alice", 70));
// 根据name升序,score降序排序
students.sort(Comparator.comparing(Student::getName)
.thenComparing(Comparator.comparing(Student::getScore).reversed()));
for (Student student : students) {
System.out.println(student.getName() + " " + student.getScore());
}
```
输出结果为:
```
Alice 70
Jerry 90
Tom 80
```
以上代码中,使用了Comparator.comparing方法来获取一个比较器,然后使用thenComparing方法来进行多级排序。其中,reversed方法可以用来进行降序排序。最后使用List的sort方法来进行排序。