#java
Как отсортировать массив например int в порядке обратном Arrays.sort. Как сделать это просто и красиво? Ничего лучше, чем подсунуть в sort() компаратор не приходит на ум. Но компаратор принимает только массив Integer.
Ответы
Ответ 1
Нет прямого способа сортировки массива примитивов в убывающем порядке. Поэтому у вас в общем есть два пути (без учета возможности реализации собственного алгоритма сортировки): Переход на классы-обертки и использование Collections.sort и Comparator Сортировка примитивов по возрастанию и дополнительные манипуляции с результатом: либо реверс, либо смена логики, использующей результат сортировки (в конце концов результат одной сортировки от другой отличается лишь в направлении прохода по массиву).Ответ 2
Как сделать это просто и красиво? Arrays.sort(sortedData, Collections.reverseOrder()); компаратор принимает только массив Integer Это не так. Массив стрингов тоже сортирует: String[] strings = {"d", "e", "b", "a", "c"}; Arrays.sort(strings,Collections.reverseOrder()); for (int i = 0; i < strings.length; i++) { System.out.print(strings[i] + " "); } Вывод: e d c b a Ответ 3
Arrays.sort(sortedData, Collections.reverseOrder());Ответ 4
в Java8 отсортировать в обратном порядке можно так Arrays.parallelSort(array)Ответ 5
Достаточно в компораторе результат сравнения умножить на -1: return a.compareTo(b) * (-1);Ответ 6
Можно обойтись без реализации компоратора,тогда можно будет написать так: //... ArrayListlist = new ArrayList (); list.add(1); list.add(3); list.add(2); Collections.sort(list); Collections.reverse(list); System.out.println(list); //... Затем можно использовать: int[] intArray = ArrayUtils.toPrimitive(list.toArray(new Integer[myList.size()])); Правда это все "изврат", проще написать свою сортировку, которая к тому же будет работать быстрее.
Комментариев нет:
Отправить комментарий