今天有个需求,需要根据用户报名的课程进行排序。排序的规则包含了4个方面:有直播优先;当前专题优先;有直播的,按直播时间正序;无直播的,按最后学习时间倒序。在使用Collections.sort,最后写出来的效果,利用多个字段,对列表进行排序
Collections.sort(result, new Comparator<EnrolmentVO>() {
@Override
public int compare(EnrolmentVO a, EnrolmentVO b) {
// 有直播的优先
if (!a.getLiveStatus().equals(b.getLiveStatus())) {
return a.getLiveStatus().compareTo(b.getLiveStatus());
}
// 当前专题优先
if (!a.getCurrentSpecialLive().equals(b.getCurrentSpecialLive())) {
return b.getCurrentSpecialLive().compareTo(a.getCurrentSpecialLive());
}
// 有直播的,按直播时间正序
if (a.getLatestLiveTime() != null && b.getLatestLiveTime() != null) {
return a.getLatestLiveTime().compareTo(b.getLatestLiveTime());
}
// 无直播的,按最后学习时间倒序
return b.getLastLearningTime().compareTo(a.getLastLearningTime());
}
});
这样比较清晰,比之前用sort定义数值再来排序,更容易扩展