ArrayList<int[]> segment = new Arraylist<int[]>();
segment.add(new int[]{2,3,1});
segment.add(new int[]{2,1,1});
segment.add(new int[]{1,1,1});
segment.add(new int[]{2,4,1});
segment.add(new int[]{3,3,1});

Что я хочу сделать, так это отсортировать эти списки массивов в соответствии с первым элементом каждого массива, и если элемент такой же, выполните сортировку в соответствии со вторым элементом массива / массивов

Например, приведенные выше строки кода следует изменить на (1,1,1) (2,1,1) (2,3,1) (2,4,1) (3,3,1)

Это то, что у меня есть до сих пор с точки зрения решения этой проблемы,

    public static void SortSegment(ArrayList<int[]> segment){
        Collections.sort(segment, new Comparator<int[]>() {
             public int compare(int[] a, int[] b) {
                  return (a[0] - b[0]);
             }
        });
    }

Этот фрагмент кода сортирует список массивов int в соответствии с первым элементом каждого из массивов int. Как мне изменить его, чтобы он работал в тех случаях, когда первый элемент такой же, чтобы он учитывал второй элемент?

Спасибо.

0
sarth sachdeva 5 Сен 2016 в 05:35

2 ответа

Интерфейс Comparator имеет несколько полезных служебных (по умолчанию) методов в Java 8, которые полезны для пользовательской сортировки:

segment.sort(Comparator.comparingInt(el -> el[0]).thenComparingInt(el -> el[1]));
1
sprinter 5 Сен 2016 в 02:52

Попробуй это:

segments.sort(Comparator.comparingInt(a -> a[0])
    .thenComparing(a -> a[1])
    .thenComparing(a -> a[2]));
0
Bohemian 5 Сен 2016 в 02:56