Collections.sort не будет работать с пользовательским компаратором? - PullRequest
0 голосов
/ 29 июня 2011
import java.util.*;

public class ABC {
    public static void main(String[] args) {
        List<Integer> values = null;

        values = new ArrayList<Integer>();
        values.add(5);
        values.add(9);
        values.add(3);
        values.add(55);
        values.add(4);

        Collections.sort(values);
        System.out.println(values);



        values = new ArrayList<Integer>();
        values.add(5);
        values.add(9);
        values.add(3);
        values.add(55);
        values.add(4);

        Comparator<Integer> cmp = new Comparator<Integer>() {
                    @Override
                    public int compare(Integer o1, Integer o2) {
                        int o1i = o1;
                        int o2i = o2;
                        return o1i - o1i;
                    }
                };

        Collections.sort(values, cmp);
        System.out.println(values);
    }
}

Это печатает:

[3, 4, 5, 9, 55]
[5, 9, 3, 55, 4]

что явно не является ожидаемым результатом. Чего мне не хватает?

Ответы [ 5 ]

7 голосов
/ 29 июня 2011

У вас есть ошибка:

Изменить

return o1i - o1i;

на

return o1i - o2i;
2 голосов
/ 29 июня 2011

Ваш компаратор вычитает o1i - o1i, каждый раз давая 0.

(Вы ничего не получаете, присваивая o1 и o2 локальным int переменным; просто вычитайте o1 - o2.)

1 голос
/ 29 июня 2011

У вас ошибка ввода, у компаратора должно быть return o1i - o2i;

, а не return o1i - o1i;

0 голосов
/ 29 июня 2011

используйте это

int o1i = o1;
                    int o2i = o2;
                    return o1i - o2i;

Это дает следующий результат

[3, 4, 5, 9, 55]

[3, 4, 5, 9, 55]

0 голосов
/ 29 июня 2011
return o1i - o1i;

Полагаю, вы имели в виду;

return o1i - o2i;
...