java - 使用 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 是从哪里来的?
解决方案
你正在调用,编译器解析到Arrays.sort(T[] a, Comparator<? super T> c)
哪里,这意味着 lambda 表达式必须实现方法。T
Integer
compare(Integer o1, Integer o2)
a
并且b
是该方法的两个参数。这就是lambda 表达式的工作方式,您必须命名(并可选择键入)功能接口的抽象方法的形式参数。
推荐阅读
- c++ - 使用 map<>.emplace 时出现错误“没有匹配的函数调用”
- python - Python Selenium - 从列表框中获取 url 而不是单击它
- excel-formula - 如何将每日级别的日期数据与 Excel 中的每小时级别的日期数据匹配?
- javascript - 正则表达式在 Javascript 中验证用户名
- c++ - 'operator==' 不匹配(操作数类型为 'hockey::Personne* const' 和 'const hockey::Personne')
- r - 如何将斐波那契数列中的所有项保存到“n”
- android - 使用 `flutter install` 在 Android 上更新 Flutter App
- bots - 如何以编程方式向@BotFather 发送消息?
- numpy - 如何在numpy中选择双精度数组的特定行和列来形成子矩阵?
- python - 从 colab 加载模型时没有名为“sklearn.svm._classes”的模块