使用Collections.reverseOrder()对int数组逆序排序报错的问题排查
错误原因及解决办法
核心错误原因
Arrays.sort(T[], Comparator<? super T>)是为对象类型数组设计的排序方法,Java泛型不支持基本类型,因此无法将int[](基本类型数组)传入该方法,编译器无法推断出符合要求的泛型参数T。Collections.reverseOrder()返回的是Comparator<Object>类型的比较器,只能用于对象的比较排序,不能直接作用于int这种基本类型。
几种可行的解决方式
- 改用
Integer对象数组排序
直接把数组类型换成包装类Integer[],就能兼容带比较器的排序方法:
public void p10(int a, int b, int c){ Integer[] nums = new Integer[] {a, b, c}; Arrays.sort(nums, Collections.reverseOrder()); System.out.println(Arrays.toString(nums)); }
- 先升序排序再手动反转数组
先利用Arrays.sort(int[])对基本类型数组做升序排序,再通过循环反转数组实现逆序:
public void p10(int a, int b, int c){ int[] nums = new int[] {a, b, c}; Arrays.sort(nums); // 手动反转数组 for (int i = 0; i < nums.length / 2; i++) { int temp = nums[i]; nums[i] = nums[nums.length - 1 - i]; nums[nums.length - 1 - i] = temp; } System.out.println(Arrays.toString(nums)); }
- 使用Java流处理(Java 8+)
通过流将基本类型数组转为包装类流,排序后再转回基本类型数组:
public void p10(int a, int b, int c){ int[] nums = new int[] {a, b, c}; int[] reversedSorted = Arrays.stream(nums) .boxed() .sorted(Collections.reverseOrder()) .mapToInt(Integer::intValue) .toArray(); System.out.println(Arrays.toString(reversedSorted)); }
内容的提问来源于stack exchange,提问作者Amin Mousavi
相关产品推荐
相关产品推荐

