gpt4 book ai didi

lambda - 如何编写比较器以使用 lambda 表达式基于第二列对二维数组进行排序

转载 作者:行者123 更新时间:2023-12-02 08:43:17 27 4
gpt4 key购买 nike

我正在研究 Java 中的二维数组排序问题。我想根据每行中的第二列对数组进行排序,例如 a[i][1]。我正在尝试编写一个 lambda 表达式,将其放入 Arrays.sort(a, comparator) 中,以避免编写整个类。

这是我尝试过的:

Arrays.sort(contests, (int[] num1, int[] num2) -> Integer number1 = num1[1];
Integer number2 = num2[1];
return number2.compareTo(number1);
);

我不确定出了什么问题,因为当我运行时,Java 不会给我确切的错误消息。我知道 lambda 表达式的第一部分是输入,第二部分是比较。由于 .compareTo() 仅适用于对象,这就是我创建两个整数的原因。 Eclipse 一直告诉我插入;整数之后。有人可以帮我吗?谢谢

最佳答案

lambda 表达式内的类型定义来自上下文,不需要进一步的类型定义。
您的示例仅使用数组 contests[1] 中的值。
Arrays.sort() 需要一个一维数组。
如果 contests 定义为 Integer[][] array,那么此表达式应该适合您:

Arrays.sort( 竞赛[1], (num1, num2) -> ( num2.compareTo( num1 ) ) );


要对两个对应的数组进行排序 - Arrays.sort() 将不起作用:

index1 = 0;  // defined as class variable
index2 = 0; // defined as class variable
Arrays.stream( contests[1] ).map( (n) -> new Integer[] {
contests[0][index1], contests[1][index1++]
} ).sorted( (arr1,arr2) -> Integer.compare( arr2[1], arr1[1] ) )
.forEach( (arr) -> {
contests[0][index2] = arr[0];
contests[1][index2++] = arr[1];
} );

一种方法是将 contests[0] 的相应值(相同索引)与 contests[1] 配对,并将这些数组映射到 contest[ 1] 值。
排序后,将值写回到 forEach 循环中。

关于lambda - 如何编写比较器以使用 lambda 表达式基于第二列对二维数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com