3 回答

TA贡献1813条经验 获得超2个赞
如果您无法更改输入数组的类型,则可以执行以下操作:
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);
这可以使用ArrayUtilscommons-lang项目轻松地在int[]和之间进行转换Integer[],创建数组的副本,进行排序,然后将排序后的数据复制到原始副本上。

TA贡献1826条经验 获得超6个赞
使用流(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
);

TA贡献1818条经验 获得超8个赞
如果您不想复制数组(例如,数组很大),则可能需要创建一个List<Integer>可用于排序的包装器:
final int[] elements = {1, 2, 3, 4};
List<Integer> wrapper = new AbstractList<Integer>() {
@Override
public Integer get(int index) {
return elements[index];
}
@Override
public int size() {
return elements.length;
}
@Override
public Integer set(int index, Integer element) {
int v = elements[index];
elements[index] = element;
return v;
}
};
现在,您可以使用自定义比较器对此包装器列表进行排序。
添加回答
举报