Java: Arrays.parallelSort в int [] без использования стандартного компаратора

В текущей реализации я использую массив целых чисел Integer [], чтобы использовать внешний компаратор. Порядок не «естественный», а определенный внешне.

Arrays.parallelSort(Integer[] array, Comparator<T> cmp);

Есть ли способ использовать parallelSort с массивом целых чисел int [] и определенным пользователем компаратором?

вместо этого что-то вроде:

Arrays.parallelSort(int[] array, IntComparator cmp);

Проблема в производительности (подумайте, если у вас 10 миллионов целых)

java не поддерживает настраиваемый компаратор в примитивном массиве.

zhh 03.08.2018 12:27

Вот почему я спрашиваю ... Я НЕ может быть примитивным типом

ic3 03.08.2018 12:27

Один подход, преобразование int[] в Integer[].Arrays.stream(arr).boxed().sort(cmparator).maptoIn‌​t(x -> x).toArray()

zhh 03.08.2018 12:32

Вы используете Integer [] или int []?

Lino 03.08.2018 12:36

Я использую Integer [], но хотел бы использовать parallelSort с int []

ic3 03.08.2018 12:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
147
1

Ответы 1

Если вы хотите использовать собственный компаратор со стандартными методами Java SE Arrays.parallelSort(...) для массива целых чисел, то это должен быть Integer[], а не int[].

Вот пример (непроверенный / на основе https://stackoverflow.com/a/33045466/139985)

int[] ia = {99, 11, 7, 21, 4, 2};
ia = Arrays.stream(ia).
    boxed().
    parallel().
    sorted((a, b) -> b.compareTo(a)). // sort descending
    mapToInt(i -> i).
    toArray();

который преобразуется из int[] в Integer и обратно с использованием потоков.

Существуют и другие альтернативы с использованием сторонних библиотек:

К сожалению, ни один из приведенных выше ответов не использует параллельную сортировку, но могут быть альтернативы.

Это как-то то, что мы делаем :-)

ic3 03.08.2018 13:20

Что ж ... альтернативы нет, если только вы не хотите искать неясную стороннюю библиотеку, которая выполняет параллельную сортировку int[] с помощью специального «компаратора».

Stephen C 03.08.2018 13:26

Другие вопросы по теме