-
慕姐8265434
如果您无法更改输入数组的类型,则可以执行以下操作: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[],创建数组的副本,进行排序,然后将排序后的数据复制到原始副本上。
-
跃然一笑
使用流(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 );
-
弑天下
如果您不想复制数组(例如,数组很大),则可能需要创建一个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; } };现在,您可以使用自定义比较器对此包装器列表进行排序。