有没有简单的方法可以像在Arrays类中升序排序一样降序排序数组?
还是说我必须停止懒惰并自己完成此操作 :[
sort(T[] a, Comparator<? super T> c)
Arrays.sort(a, Collections.reverseOrder());
Arrays.sort()
方法不能直接用于对原始数组进行降序排序。如果您尝试通过传递由Collections.reverseOrder()
定义的反向Comparator来调用Arrays.sort()
方法,则会抛出以下错误:
no suitable method found for sort(int[],comparator)
这种方法可以用于“对象数组”,例如整数数组,但是无法用于原始数组,例如整型数组。
对原始数组进行降序排序的唯一方法是,首先按升序排序数组,然后在原地翻转数组。对于二维原始数组也是如此。
列表
Collections.sort(list, Collections.reverseOrder());
对于一个数组
Arrays.sort(array, Collections.reverseOrder());
Arrays.sort(data, Collections.reverseOrder());
Collections.reverseOrder()
返回一个使用相反自然顺序的Comparator
。您可以使用Collections.reverseOrder(myComparator)
获取自己比较器的反转版本。
Collections.sort()
需要一个List
作为输入参数,而不是一个数组。 - Pascal Thivent一个替代方案(针对数字!!!)可能是
字面意思:
array = -Arrays.sort(-array)
Integer.MIN_VALUE
(或使用的任何其他基本类型)会失败之外。最好进行sort()
,然后再进行reverse()
,但是你需要自己执行反转操作,因为它们没有添加Arrays.reverse()
实现。 - Andreas没有显式比较器:
Collections.sort(list, Collections.reverseOrder());
使用显式比较器:
Collections.sort(list, Collections.reverseOrder(new Comparator()));
使用Arrays.sort()和Collections.reverseOrder()无法直接对原始类型数组(即int[] arr = {1, 2, 3};
)进行反向排序,因为这些方法要求参考类型(Integer
)而不是原始类型(int
)。
但是,我们可以使用Java 8 Stream先将数组装箱以便进行反向排序:
// an array of ints
int[] arr = {1, 2, 3, 4, 5, 6};
// an array of reverse sorted ints
int[] arrDesc = Arrays.stream(arr).boxed()
.sorted(Collections.reverseOrder())
.mapToInt(Integer::intValue)
.toArray();
System.out.println(Arrays.toString(arrDesc)); // outputs [6, 5, 4, 3, 2, 1]
首先,您需要使用以下方式对数组进行排序:
Collections.sort(myArray);
然后您需要使用以下方式将顺序从升序更改为降序:
Collections.reverse(myArray);
Java 8:
Arrays.sort(list, comparator.reversed());
reversed()
方法可以反转指定的比较器。通常,比较器按升序排序,使用该方法可以将顺序更改为降序。如果一个数组是 Integer 类型的,则可以使用以下方法:
Integer[] arr = {7, 10, 4, 3, 20, 15};
Arrays.sort(arr, Collections.reverseOrder());
当数组是 int 数据类型时,您可以使用以下内容:
int[] arr = {7, 10, 4, 3, 20, 15};
int[] reverseArr = IntStream.rangeClosed(1, arr.length).map(i -> arr[arr.length-i]).toArray();
如果数组中包含基本类型元素,如果可以使用org.apache.commons.lang(3)
,则反转数组(排序后),可以使用以下方法:
ArrayUtils.reverse(array);
Arrays.sort(primitives); ArrayUtils.reverse(primitives);
。 - Josip Maslac