Сортировка списка массивов на основе двух элементов с приоритетом

#java #sorting #arraylist

#java #сортировка #список массивов

Вопрос:

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

Допустим, у меня есть array1 с [1, 3]; array2 с [1, 1]; array3 с [0, 50].

Сначала они не сортируются в списке массивов array1, array2 и array3. После сортировки они располагаются в следующем порядке: array2, array1 и array3.

Комментарии:

1. ОК. но тело вашего вопроса — это просто описание задачи. в чем ваш вопрос?

2. Нам нравится, что вы здесь, и нам нужен ваш код, чтобы мы могли помочь вам исправить это.

Ответ №1:

вы можете отсортировать список по Collections.sort .

 public void sort(List<Integer[]> list)
     return Collections.sort(list, (o1, o2) -> o1[0].equals(o2[0]) ? o1[1] - o2[1] : o1[0] - o2[0]);
}
  

мы используем лямбда-выражение для сравнения с Integer[]

когда вы хотите отсортировать два Integer (A, B) по убыванию, вы должны сравнить их следующим образом B-A , и если вы хотите отсортировать по возрастанию, вы должны использовать A-B

Ответ №2:

Однострочный с java8

 list.stream().sorted((prim, sec) -> prim[0] == sec[0] ? prim[1] - sec[1] : prim[0] - sec[0]).collect(Collectors.toList());