custom sorting a java array

collections, java, sorting

Solution

You're on the right track, but

- You're better off with an `Integer` array than an `int` array if you're using a generic `Comparator<Integer>`.

- You have to use `Arrays.sort` instead `Collections.sort` for sorting an array.

You have to make the distances variable final if it's referenced in an anonymous inner class.

final double[] distances=new double[]{3.2, 1.4, 7.3, 2.2, 9.1};
Integer[] sortedIDXs  = new Integer[]{0,1,2,3,4};
Arrays.sort(sortedIDXs, new Comparator<Integer>() {
    public int compare(Integer idx1, Integer idx2) {
        return Double.compare(distances[idx1], distances[idx2]);
    }
});

Problem

I have an [] that has some numbers (distances from some point). I want to create an array of indexes into the first array where the indexes are sorted by the distance. e.g. suppose `double[] dist=new double[5] {3.2, 1.4, 7.3, 2.2, 9.1};` then I want to get an array like this: `int[] sortedIndexes=new int[5] {1, 3, 0, 2, 4};` so if I want the second nearest distance I can check dist[sortedIndexes[1]]. I don't want to sort the original array, just the array of indexes based on the distances. UPDATE 1: The Code I was trying looks like this: ``` Collections.sort(sortedIDXs, new Comparator<Integer>() { public int compare(int idx1, int idx2) { return Double.compare(distances[idx1], distances[idx2]); } }); ``` But I am getting several errors with it with the most "problematic" one being: "Cannot refer to a non-final variable distances inside an inner class defined in a different method" Thanks

Original source