問題描述
最近寫接口的時候,查完資料順手排序了一下,結果清單資料始終是亂序的,查了好久都沒看出問題,最後才發現是自己寫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());