java 2d массив вторичной сортировки - PullRequest
0 голосов
/ 07 апреля 2020

Я хочу отсортировать следующий двумерный массив так, чтобы первый индекс каждой строки возрастал, а если он одинаков в двух строках, то второй индекс также сортируется по возрастанию. Пример: дано:

int[][] arr = new int[][]{{2,5},{2,3},{2,1},{2,4},{2,2},{1,2},{1,1},{1,4},{1,3},{1,5}};

Я хочу, чтобы оно было arr = {{1,1},{1,2},{1,3},{1,4},{1,5},{2,1},{2,2},{2,3},{2,4},{2,5}};

Мне удалось отсортировать по первому индексу, используя:

Arrays.sort(arr, Comparator.comparingInt(arr -> arr[0]));

Теперь моя идея должен был разрезать его на подмассивы, отсортировать и объединить их вместе, но я действительно хотел знать, есть ли лучший способ сделать это, о котором я не знаю. (возможно, даже используя компаратор, спасибо заранее)

1 Ответ

2 голосов
/ 07 апреля 2020

Вы можете добавить второй компаратор к первому с помощью thenComparing, что в основном приводит к тому, что, если первый компаратор возвращает равный результат, второй компаратор используется для разрыва t ie:

        int[][] arr2 = new int[][]{{2,5},{2,3},{2,1},{2,4},{2,2},{1,2},{1,1},{1,4},{1,3},{1,5}};

        Comparator<int[]> first = Comparator.comparingInt(a -> a[0]);
        Comparator<int[]> second = Comparator.comparingInt(a -> a[1]);

        Arrays.sort(arr2, first.thenComparing(second));

        for(int i = 0; i< arr2.length; i++){
            System.out.println(arr2[i][0] + "," + arr2[i][1]);
        }

также возможно создать более сжатую версию компаратора, используя thenComparingInt:

Comparator<int[]> cp = Comparator.<int[]>comparingInt(a -> a[0]).thenComparingInt(a -> a[1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...