为什么我必须创建一个新的整数数组B
才能使用Arrays.sort
和lambda函数?
class Solution {
public int[] sortArrayByParity(int[] A) {
Integer[] B = new Integer[A.length];
for (int t = 0; t < A.length; ++t)
B[t] = A[t];
Arrays.sort(B, (a, b) -> Integer.compare(a%2, b%2));
for (int t = 0; t < A.length; ++t)
A[t] = B[t];
return A;
}
}
尝试直接对原始数组进行排序-Arrays.sort(A, (a, b) -> Integer.compare(a%2, b%2))
-出现以下编译错误:
Arrays类型的sort(int [])方法不适用于参数(int [],(a,b)-> {})
答案 0 :(得分:2)
您使用的Arrays.sort
的变体接受一个Comparator
参数,期望将某种引用类型的数组作为输入,因此您不能将原始数组传递给它。
因此,您无法将原始数组A
传递给它。
您必须将原始数组(int[]
)转换为引用类型(Integer[]
)的数组才能使用void sort(T[] a, Comparator<? super T> c)
。
但是,您可以使用Stream
s来减少代码:
public int[] sortArrayByParity(int[] A) {
return Arrays.stream(A).boxed().sorted(Comparator.comparing(a -> a % 2)).mapToInt(Integer::intValue).toArray();
}
答案 1 :(得分:0)
下面是Arrays.sort方法的方法签名
公共静态无效排序(T [] a,比较器c)
您可以看到它期望Generic类型,而基本类型不是引用类型。