首页 > 解决方案 > Java:使用非标准比较器对 int[] 进行 Arrays.parallelSort

问题描述

对于当前的实现,我使用整数数组 Integer[] 来使用外部比较器。顺序不是“自然的”顺序,而是外部定义的顺序。

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

有没有办法将 parallelSort 与整数数组、int[] 和用户定义的比较器一起使用?

相反,类似:

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

性能是问题(想想你是否有 10mio 整数)

标签: java

解决方案


Arrays.parallelSort(...)如果您想在整数数组上使用带有标准 Java SE 方法的自定义比较器,那么它必须是 anInteger[]而不是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来回转换。

使用 3rd 方库还有其他各种替代方案:

不幸的是,上述问题的答案都没有使用并行排序,但可能有替代方案。


推荐阅读