Leo*_*nid 32 java arrays multidimensional-array comparator
说,我们有以下二维数组:
int camels[][] = new int[n][2];
Run Code Online (Sandbox Code Playgroud)
应该如何Comparator声明Java 类,使用降序排列第一个元素的数组Arrays.sort(camels, comparator)?在compare供参考的功能是:
@Override public int compare(int[] a, int [] b)
{
return b[0] - a[0];
}
Run Code Online (Sandbox Code Playgroud)
aio*_*obe 62
[...]如何声明Java Comparator类以按降序排列第一个元素对数组进行排序[...]
这是使用Java 8的完整示例:
import java.util.*;
public class Test {
public static void main(String args[]) {
int[][] twoDim = { {1, 2}, {3, 7}, {8, 9}, {4, 2}, {5, 3} };
Arrays.sort(twoDim, Comparator.comparingInt(a -> a[0])
.reversed());
System.out.println(Arrays.deepToString(twoDim));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
[[8, 9], [5, 3], [4, 2], [3, 7], [1, 2]]
Run Code Online (Sandbox Code Playgroud)
对于Java 7,您可以:
Arrays.sort(twoDim, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return Integer.compare(o2[0], o1[0]);
}
});
Run Code Online (Sandbox Code Playgroud)
如果你不幸在Java 6或更早版本上工作,你会做:
Arrays.sort(twoDim, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return ((Integer) o2[0]).compareTo(o1[0]);
}
});
Run Code Online (Sandbox Code Playgroud)
@aioobe 的回答非常好。我只想为 Java 8 添加另一种方式。
int[][] twoDim = { { 1, 2 }, { 3, 7 }, { 8, 9 }, { 4, 2 }, { 5, 3 } };
Arrays.sort(twoDim, (int[] o1, int[] o2) -> o2[0] - o1[0]);
System.out.println(Arrays.deepToString(twoDim));
Run Code Online (Sandbox Code Playgroud)
对我来说,Java 8 语法直观且易于记忆。
刚刚试过这个解决方案,我们甚至不必写int。
int[][] twoDim = { { 1, 2 }, { 3, 7 }, { 8, 9 }, { 4, 2 }, { 5, 3 } };
Arrays.sort(twoDim, (a1,a2) -> a2[0] - a1[0]);
Run Code Online (Sandbox Code Playgroud)
这个东西也能用,它会自动检测字符串的类型。
| 归档时间: |
|
| 查看次数: |
99712 次 |
| 最近记录: |