如何使用自定义比较器对整数数组进行排序?
我需要使用自定义比较器对 int 数组进行排序,但是 Java 的库没有为具有比较器的 int 提供排序函数(比较器只能与对象一起使用)。有什么简单的方法可以做到这一点吗?
我需要使用自定义比较器对 int 数组进行排序,但是 Java 的库没有为具有比较器的 int 提供排序函数(比较器只能与对象一起使用)。有什么简单的方法可以做到这一点吗?
如果无法更改输入数组的类型,则以下方法将起作用:
final int[] data = new int[] { 5, 4, 2, 1, 3 };
final Integer[] sorted = ArrayUtils.toObject(data);
Arrays.sort(sorted, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
// Intentional: Reverse order for this demo
return o2.compareTo(o1);
}
});
System.arraycopy(ArrayUtils.toPrimitive(sorted), 0, data, 0, sorted.length);
这使用 commons-lang 项目中的 ArrayUtils
在 和 之间轻松转换,创建数组的副本,执行排序,然后将排序后的数据复制到原始数据上。int[]
Integer[]
使用流(Java 8)怎么样?
int[] ia = {99, 11, 7, 21, 4, 2};
ia = Arrays.stream(ia).
boxed().
sorted((a, b) -> b.compareTo(a)). // sort descending
mapToInt(i -> i).
toArray();
或就地:
int[] ia = {99, 11, 7, 21, 4, 2};
System.arraycopy(
Arrays.stream(ia).
boxed().
sorted((a, b) -> b.compareTo(a)). // sort descending
mapToInt(i -> i).
toArray(),
0,
ia,
0,
ia.length
);