Сортировка списка Java от ближайшего к дальнему (с несколькими ключами)

Я хочу отсортировать список Java от ближайшего к дальнему относительно определенного значения.

Например:

список:

{4,5,8,4,5,1,2,10,1,0,12}

для сравнения о значение 3 станет:

{4,4,5,5,2,1,1,0,8,10,12}

Таким образом, первые значения находятся на расстоянии от 1 до 3, а те, что находятся на расстоянии 2 от 3...

Я попробовал ArrayList с Comparator, но я не вижу, как сравнить два на два. Но также с расстояниями древовидной карты, но ключи не должны быть уникальными.

Я надеюсь, что было ясно!

У тебя есть решение? Спасибо

2 ответа

Решение

Вот как бы я это сделал

public class Main {
    public static void main(String[] args) {

        List<Integer> arr = Arrays.asList(4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12);
        final int pivot = 3;

        Collections.sort(arr, new Comparator<Integer>() {
            public int compare(Integer a, Integer b) {
                int d1 = Math.abs(a - pivot);
                int d2 = Math.abs(b - pivot);
                return Integer.compare(d1, d2);
            }
        });

        System.out.println(arr);
    }
}

Попробуйте это решение, создав пользовательские Comparator:

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Main
{
    public static void main(String[] args)
    {
        List<Integer> list = Arrays.asList(4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12);
        System.out.println(list);
        list.sort(new CustomComparator(3));
        System.out.println(list);
    }
}

class CustomComparator implements Comparator<Integer>
{

    private int value;

    public CustomComparator(int value)
    {
        this.value = value;
    }

    @Override
    public int compare(Integer o1, Integer o2)
    {
        return Integer.compare(Math.abs(o1 - value), Math.abs(o2 - value));
    }
}

Выход:

[4, 5, 8, 4, 5, 1, 2, 10, 1, 0, 12]
[4, 4, 2, 5, 5, 1, 1, 0, 8, 10, 12]
Другие вопросы по тегам