为什么传递的数组不能使用lambda函数

时间:2019-11-04 07:50:18

标签: java lambda

为什么我必须创建一个新的整数数组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)-> {})

2 个答案:

答案 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类型,而基本类型不是引用类型。