有人看到可以解决这个问题的库吗?默认数组排序无法处理自定义比较器。
答案 0 :(得分:1)
您只能在对象上使用Comparator
。您不能使用基本类型
通过使用 ArrayUtils 类,您可以将原始数组转换为包装器,反之亦然
所以使用Apache Commons ArrayUtils类。
Integer objectArray = ArrayUtils.toObject(array);
Arrays.sort(objectArray,new MyComparator());
int[] sortedArray = ArraysUtils.toPrimitive(objectArray);
答案 1 :(得分:0)
嗯,这不需要答案,但我想我必须让你明白这背后的原因。
所有基本数据类型或原始数据类型只能按其自然顺序进行比较。这是由语言规范强制执行的。
自然排序:意味着群体在自然界中的排列方式。对于例如如果你考虑自然数,1 < 2 < 3 < ... < 10
总是如此,其他原语如char
等也是如此。
这也很有意义并且有助于优化,因为原始数据类型在很多地方的语言中使用(如循环计数器,switch语句等),编译器实际上可以优化很多东西,如果它可以假设一类变量的自然顺序。
还有很多要点,但我确信你得到了Arrays默认排序不为原始数据类型提供自定义Comparator的原因。