如何对list集合中的对象按照对象的某个属性排序

你说的曾经没有我的故事 提交于 2019-11-27 03:20:43

字符串

List<String> list = new ArrayList<>();
list.add("111");
list.add("555");
list.add("444");
list.add("333");
list.add("222");
System.out.println("排序前:" + list);
Collections.sort(list);
System.out.println("排序后:" + list);

输出结果为:

排序前:[111, 555, 444, 333, 222]

排序后:[111, 222, 333, 444, 555]

String源码分析

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
}

从上述源码可以看出,String类实现了Comparable接口,所以可以直接对list集合中的String进行排序操作。

对象

要想对集合中的Person对象进行排序操作,有两种实现方式:

  • Person对象实现Comparable接口,并重写其中的comparaTo方法。
class Person  implements Comparable<Person>{

  private String name;
  private Integer age;

  public Person(String name, Integer age) {
    this.name = name;
    this.age = age;
  }

  // 省略get、set方法
  // 省略toString方法

  @Override
  public int compareTo(Person o) {
    return this.getAge().compareTo(o.getAge());
  }
}
List<Person> list = new ArrayList<>();

list.add(new Person("ddd", 40));
list.add(new Person("bbb", 20));
list.add(new Person("aaa", 10));
list.add(new Person("ccc", 30));

System.out.println("排序前:" + list);
Collections.sort(list);
System.out.println("排序后:" + list);

输出结果:

[Person{name=‘aaa’, age=10}, Person{name=‘bbb’, age=20}, Person{name=‘ccc’, age=30}, Person{name=‘ddd’, age=40}]

  • 调用Collections对象的sort方法的另一个重载方法,将一个匿名的Comaprator对象作为参数传递进去。
// 1.匿名函数方式
Collections.sort(list1, new Comparator<Person>() {
  @Override
  public int compare(Person o1, Person o2) {
    return o1.getAge().compareTo(o2.getAge());
  }
});
// 2.函数式接口方式
Collections.sort(list, Comparator.comparing(Person::getAge));

输出结果:

[Person{name=‘aaa’, age=10}, Person{name=‘bbb’, age=20}, Person{name=‘ccc’, age=30}, Person{name=‘ddd’, age=40}]

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!