首页 > 解决方案 > 使用 Lambda 表达式进行 Java 排序

问题描述

我是 Java 新手,这可能是一个愚蠢的问题。我在看'905。在 Leetcode 上按奇偶校验排序数组。解决方案之一是

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;

        /* Alternative:
        return Arrays.stream(A)
                     .boxed()
                     .sorted((a, b) -> Integer.compare(a%2, b%2))
                     .mapToInt(i -> i)
                     .toArray();
        */
    }
}

我无法理解其中带有 lambda 表达式的行。

Arrays.sort(B, (a, b) -> Integer.compare(a%2, b%2));

它如何对数组进行精确排序?a 和 b 是从哪里来的?

标签: javasortinglambda

解决方案


你正在调用,编译器解析到Arrays.sort(T[] a, Comparator<? super T> c)哪里,这意味着 lambda 表达式必须实现方法。TIntegercompare(Integer o1, Integer o2)

a并且b是该方法的两个参数。这就是lambda 表达式的工作方式,您必须命名(并可选择键入)功能接口的抽象方法的形式参数。


推荐阅读