问题描述
最近写接口的时候,查完数据顺手排序了一下,结果列表数据始终是乱序的,查了好久都没看出问题,最后才发现是自己写list.sort写习惯了,把list.stream.sorted也当成list.sort使用了。
一、list.sort
用法
templateObjs.sort(
Comparator.comparing(AnalysisTemplateObj::getGroupKey,
Comparator.nullsFirst(Comparator.naturalOrder()))
.thenComparing(AnalysisTemplateObj::getOrder,
Comparator.nullsFirst(Comparator.naturalOrder())));
源码分析
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
可以看出:sort() 方法根据指定的顺序对动态数组中的元素进行排序,它不返回任何值,只是更改动态数组列表中元素的顺序。
二、list.stream.sorted
List<SummaryExecuteConfigEntity> list = list.stream().sorted(
Comparator.comparing(SummaryExecuteConfigEntity::getOrder,
Comparator.nullsFirst(Comparator.naturalOrder())))
.collect(Collectors.toList());