[英]How to sort two dimensional array using Comparator in java
我需要通過對第一列的元素進行降序來對這樣的數組進行排序。 在第一列元素相等的情況下,第二列元素必須按升序排序。 但這我需要的是檢查並將空行放在矩陣的末尾,並且只有一個元素放在具有更多元素的相同元素之前的行。 例如,在這個數組中{3}
- 它是第一行, {}
- 最后一行。
int[][] arr = {{1, 2, 3}, {}, {3}, {1, 4}, {3, 2}, {3, 3, 5}};
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0])
return o1[1] - o2[1];
return o2[0] - o1[0];
}
});
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
以下Comparator<int[]>
啟用排序方式:
最后清空 arrays
同一索引處較大的數字按升序排列
如果從索引 0 開始,較小的數組首先變成較大的(就長度而言),則與后一個相比,先出現的數組被認為更小。
這是一個可以根據您的需要輕松修改的算法:
int[][] arr = {{1, 2, 3}, {}, {3}, {1, 4}, {3, 2, 2}, {3, 3, 5}, {3, 2}};
Arrays.sort(arr, (o1, o2) -> {
if (o1.length == 0) { return 1; } // empty last
if (o2.length == 0) { return -1; } // empty last
int min = Math.min(o1.length, o2.length); // upper bound to avoid ArrayIndexOutOfBoundsException
for (int i = 0; i < min ; i++) {
if (o1[i] != o2[i]) { // compare values on indices
return o1[i] - o2[i]; // return if different
}
}
return 1; // it goes first so it lefts first
}
);
System.out.println(Arrays.deepToString(arr));
output 將是:
[[1, 2, 3], [1, 4], [3], [3, 2, 2], [3, 2], [3, 3, 5], []]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.