对象集合排序
这是腾讯一面的一道面试题,对对象集合排序可以使用一下几种方式:
- 实现Comparable,使用 Arrays.sort();
- 使用Collections.sort,传入Comparator 实现
- List.sort
- Stream API
Person
class Person implements Comparable<Person> {
private String name;
private String grade;
private Integer age;
public Person(String name, String grade, Integer age) {
this.name = name;
this.grade = grade;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", grade='" + grade + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Person o) {
return o.getAge() - this.getAge();
}
}
几种排序方式
public class Demo01 {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("tobing", "111", 11));
personList.add(new Person("tobing", "111", 13));
personList.add(new Person("tobing", "111", 16));
personList.add(new Person("tobing", "111", 10));
// method01(personList);
// System.out.println("========================");
// method02(personList);
// System.out.println("========================");
// method03(personList);
// System.out.println("=========================");
method04(personList);
}
// 方式一:实现Comparable接口,使用Arrays.sort
private static void method01(List<Person> personList) {
Object[] objects = personList.toArray();
Arrays.sort(objects);
for (Object object : objects) {
System.out.println(object);
}
}
// 方式二:Collections.sort 传入 Comparator实现
private static void method02(List<Person> personList) {
Collections.sort(personList, (Comparator.comparingInt(Person::getAge)));
personList.forEach(System.out::println);
}
// 方式三:List API
private static void method03(List<Person> personList) {
personList.sort(Comparator.comparingInt(Person::getAge));
personList.forEach(System.out::println);
}
// 方式四:Stream API
private static void method04(List<Person> personList) {
List<Person> personList1 = personList.stream().sorted(Comparator.comparingInt(Person::getAge)).collect(Collectors.toList());
personList1.forEach(System.out::println);
}
}