我不知道任何现有的实现。
Buffer,compare 的文档没有具体说明它如何对缓冲区进行排序。
我假设这是正常的从低索引到高索引的字典顺序。
我会为此编写一个函数:
int compareLists<T extends Comparable<T>>(List<T> a, List<T> b) {
var aLength = a.length;
var bLength = b.length;
var minLength = aLength < bLength ? aLength : bLength;
for (var i = 0; i < minLength; i++) {
var result = a[i].compareTo(b[i]);
if (result != 0) return result;
}
return aLength - bLength;
}
int compareListsBy<T>(List<T> a, List<T> b, int compare(T a, T b)) {
var aLength = a.length;
var bLength = b.length;
var minLength = aLength < bLength ? aLength : bLength;
for (var i = 0; i < minLength; i++) {
var result = compare(a[i], b[i]);
if (result != 0) return result;
}
return aLength - bLength;
}
或者甚至可以使用扩展方法:
extension CompareListExtension<T> on List<T> {
int compare(List<T> other, int compare(T a, T b)) =>
compareListsBy<T>(thus, other, compare);
}
extension CompareListComparableExtension<T extends Comparable<T>> on List<T> {
int compare(List<T> other, [int compare(T a, T b)]) =>
compareListsBy<T>(this, other, compare ?? (a, b) => a.compareTo(b));
}