Ошибка при сортировке с использованием коллекции Collections - PullRequest
1 голос
/ 04 мая 2020

При запуске кода ниже я получаю сообщение об ошибке. Мне нужно предложение о том, как решить эту ошибку.

Map<String, String> map = new HashMap<String, String>();

map.put("test", "milan");
map.put("joo", "arsenal");
map.put("keer", "manu");

List list = new LinkedList(map.entrySet());
Collections.sort(list, new Comparator() {

    @Override
    public int compare(Object o1, Object o2) {
        return (((Comparable) ((Map.Entry) (o1)).getValue()).compareTo((Map.Entry) (o2)));
    }
});

Ошибка: исключение в потоке "main" java .lang.ClassCastException: java .util.HashMap $ Узел не может быть приведен к java .lang.String

Ответы [ 3 ]

4 голосов
/ 04 мая 2020

Вы сравниваете String с Map.Entry в comapre Использование ((Map.Entry) (o2)).getValue()),

Collections.sort(list, new Comparator() {

    @Override
    public int compare(Object o1, Object o2) {

        return (((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue()));

    }
});

Вы можете сделать свой код более читабельным, как,

List<Map.Entry<String, String>> list = new LinkedList(map.entrySet());
Collections.sort(list, Comparator.comparing(Map.Entry::getValue));
2 голосов
/ 04 мая 2020

В обратной строке вашего компаратора должно быть:

return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo((Comparable) ((Map.Entry) (o2)).getValue());

Причина в том, что вы забыли получить значение из o2

0 голосов
/ 04 мая 2020

Вместо Collections.sort() вы должны использовать list.sort() для сортировки списка.

List<Map.Entry<String, String>> list = new LinkedList<>(map.entrySet());
list.sort(Map.Entry.comparingByValue());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...