首页 > 解决方案 > 使用比较器对列表进行排序未按预期工作

问题描述

返回时List<Person>,我想根据 ActiveStatus 中提到的时间按降序对列表进行排序。

我尝试了以下逻辑

class Business{

  List<Person> getActivePersonListInDesc(){
  
   ....
   List<Person> personList = ..;
   Collections.sort(personList, Comparator.reverseOrder()); //not working as expected
   return personList;
   }

人物类:

class Person{
String personName;
List<ActiveStatus> status;
}

活动状态类:

class ActiveStatus{
LocalDateTime time;
}
 

标签: javacollections

解决方案


假设每个用户在 中至少有一个元素status,该列表已经排序,最新的元素排在最后,并且您想按此排序,您可以使用以下内容:

Collections.sort(personList, 
  Comparator.comparing(person -> person.status.get(person.status.size() - 1).time)
            .reverseOrder());

推荐阅读