第一、在使用Java自带的排序函数时,往往需要根据自己的需求自定义比较器。
实现Comparator接口,必须实现下面这个函数:
int compare(T o1,T o2)
关于sort和比较器的原理
sort的原理
和冒泡排序差不多,sort方法是不断的遍历List,比较List的任意相邻两个元素,看看这两个相邻的元素是否发生交换。如果List中任意两个元素都不会发生交换,说明排序结束。其中两个相邻的元素是否发生交换由比较器comparator中的compare方法的返回值决定。
比较器的原理
compare方法的返回值大于等于0时,相邻的两个元素o1和o2不交换位置;小于0时,相邻的两个元素o1和o2交换位置。需要注意的是,o1是List中下标较大的那个元素,o2是List中下标较小的那个元素。
综上所述,sort的本质就是利用比较器中的compare方法判断列表中相邻的两个元素是否发生交换。若任意两个相邻元素都不发生交换,算法结束,排序ok
举例:
public int compare(A o1, A o2) {
//升序
//return o1.a - o2.a;
//降序
return o2.a - o1.a;
}
第二、list集合排序
if(CollectionUtils.isNotEmpty(noNormalAccountItemDOList)) {
Collections.sort(noNormalAccountItemDOList, (o1, o2) -> {
if (o1.getRemittanceTime().isBefore(o2.getRemittanceTime())) {
return -1;
} else if (o1.getRemittanceTime().isAfter(o2.getRemittanceTime())) {
return 1;
}
return 0;
});
resultDOList.addAll(noNormalAccountItemDOList);
}