簡體   English   中英

如何使用 Arrays.sort 方法對 Java 中的二維 integer 數組進行排序

[英]How to use Arrays.sort method to sort a 2D integer array in Java

假設我有一個二維 integer 數組

int[][] arr = new int [][] {
            {1,1},
            {2,222},
            {3,32},
            {4,13},
            {5,1144},
            {6,111},
            {7,12341},
            {8,111}
        };

我想按每行第二個元素的遞增順序對該數組進行排序。

[[1, 1], [4, 13], [3, 32], [8, 111], [6, 111], [2, 222], [5, 1144], [7, 12341]]

但請注意,當第二個元素的值與

[8, 111] and [6, 111]

排序順序顛倒了。

所以這就是我嘗試的

Arrays.sort(arr, (a,b) -> a[1]==b[1]? b[1]-a[1]: a[1]-b[1]);

當第二個元素相等時,將排序順序反轉為降序,否則保持升序。

運行此代碼后,我得到以下結果

[[1, 1], [4, 13], [3, 32], [6, 111], [8, 111], [2, 222], [5, 1144], [7, 12341]]

注意如何

 [6, 111], [8, 111]

仍然是錯誤的順序。

也許這個?

Arrays.sort(arr, (a,b) -> a[1]==b[1]? b[0]-a[0]: a[1]-b[1])

我會嘗試使用比較器。 如果您希望第一個數字按升序排列,則刪除 reverseOrder 比較器。 否則,將其保留。如果您想在第二個數字相等時將第一個數字保留在它們相對相同的位置,則只需對第二個數字進行排序。 這將起作用,因為排序算法是穩定的。

Arrays.sort(arr, Comparator.comparingInt((int[] a) -> a[1])
        .thenComparing(a -> a[0], Comparator.reverseOrder()));

for (int[] a : arr) {
    System.out.println(Arrays.toString(a));
}

印刷

[1, 1]
[4, 13]
[3, 32]
[8, 111]
[6, 111]
[2, 222]
[5, 1144]
[7, 12341]

用這個:

    Arrays.sort(arr, Comparator.comparingInt((int[] a) -> a[1])
            .thenComparing(Comparator.comparingInt((int[] a) -> a[0]).reversed()));

使用 Integer.compare 方法:

Arrays.sort(arr, (a,b) -> a[1]==b[1]?
                          Integer.compare(b[0], a[0]):
                          Integer.compare(a[1], b[1]));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM