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

字符串

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}]

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值