-
基本类型数组 (如
int[]
long[]
double[]
等),该方法只能使用默认升序排序,不接受比较器Comparator
int[] nums = {3, 1, 2};Arrays.sort(nums);
如需对基本类型数组进行自定义排序,需要将其转换为包装类型数组
Integer[]
,再使用带比较器的Arrays.sort()
方法进行排序// 方式一Integer[] numsWrapper = Arrays.stream(nums).boxed().toArray(Integer::new);Arrays.sort(numsWrapper, (o1, o2) -> Integer.compare(o2, o1));nums = Arrays.stream(numsWrapper).mapToInt(Integer::intValue).toArray(); //转回int// 方式二nums = IntStream.of(nums).boxed().sorted((o1, o2) -> Integer.compare(o2, o1)).mapToInt(Integer::intValue).toArray();
其中,
Arrays.stream(nums)
/IntStream.of(nums)
将int[]
转换为一个流boxed()
对基本类型int
装箱为其对应的包装类型Integer
即 将IntStream
转换为Stream<Integer>
sorted() 方法用于对流中的元素进行排序
mapToInt(Integer::intValue)
将Stream<Integer>
转换回IntStream
,通过Integer::intValue
方法将Integer
对象拆箱为int
toArray()
将流转换回int
数组 -
对象类型数组(如
Integer[]
,String[]
等)的排序,该方法可以接受一个Comparator
进行自定义排序对于二维数组
int[][]
进行排序时,实际上是在对其中的每个int[]
数组(即 行)进行排序,sort()
同样可以接受一个Comparator
,用于定义排序的规则int[][] nums = {{1, 2},{3, 1}}Arrays.sort(nums, (o1, o2) -> Integer.compare(o1[1], o2[1])); // [[3,1], [2,1]]