需求:
对如下List中的数据进行排序,先按照finishLessonCount进行排序,如果finishLessonCount相同,则按照姓名进行排序
如下是List中的对象实体
@Data
public class TeacherLessonStatistics {
private int teacherId;
private String name;
private int finishLessonCount;
private int totalScore;
private int ranking;
private boolean isClassAdmin;
}
单纯性的对数字,或者英文进行排序比较方便,Collections的sort方法可以进行排序
private List<TeacherLessonStatistics> sortListData(List<TeacherLessonStatistics> statisticsList) {
Collections.sort(statisticsList, (o1, o2) -> {
if (o2.getFinishLessonCount() > o1.getFinishLessonCount()) {
return 1;
}
if (o2.getFinishLessonCount() == o1.getFinishLessonCount()) {
return o2.getName().compareTo(o1.getName()); //适用于英文,英文排序默认根据英文ASCII码进行排序
}
return -1;
});
return statisticsList;
}
如果要对中文字符进行排序,需要使用Collator类,先指定Collator的地点
Collator cmp = Collator.getInstance(Locale.CHINA);
再利用Collator的compare进行比较
/**
* 对list里面的数据进行排序,先根据完成课时数量排,课时数量相同时,根据姓拼音排序
*
* @param statisticsList
* @return
*/
private List<TeacherLessonStatistics> sortListData(List<TeacherLessonStatistics> statisticsList) {
Collections.sort(statisticsList, new Comparator<TeacherLessonStatistics>() {
Collator cmp = Collator.getInstance(Locale.CHINA);
@Override
public int compare(TeacherLessonStatistics o1, TeacherLessonStatistics o2) {
if (o2.getFinishLessonCount() > o1.getFinishLessonCount()) return 1;
if (o2.getFinishLessonCount() == o1.getFinishLessonCount()){
CollationKey c1 = cmp.getCollationKey(o1.getName());
CollationKey c2 = cmp.getCollationKey(o2.getName());
return cmp.compare(c1.getSourceString(), c2.getSourceString());
}
return -1;
}
});
return statisticsList;
}
网友评论