Search code examples
javasorting

How to sort an array of ints using a custom comparator?


I need to sort an array of ints using a custom comparator, but Java's library doesn't provide a sort function for ints with comparators (comparators can be used only with objects). Is there any easy way to do this?


Solution

  • If you can't change the type of your input array the following will work:

    final int[] data = new int[] { 5, 4, 2, 1, 3 };
    final Integer[] sorted = ArrayUtils.toObject(data);
    Arrays.sort(sorted, new Comparator<Integer>() {
        public int compare(Integer o1, Integer o2) {
            // Intentional: Reverse order for this demo
            return o2.compareTo(o1);
        }
    });
    System.arraycopy(ArrayUtils.toPrimitive(sorted), 0, data, 0, sorted.length);
    

    This uses ArrayUtils from the commons-lang project to easily convert between int[] and Integer[], creates a copy of the array, does the sort, and then copies the sorted data over the original.