Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 49
1

Сортировка Map по ключу

12.11.2017, 23:43. Показов 8673. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Сортирую Map по ключу через List -> Sort -> Comparator

Почему для 'e1.getKey()' не доступен метод 'compareTo()'?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package mapsorttest03;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
public class MapSortTest03 {
 
    public static void main(String[] args) {
 
        String[][] stateArray = {{"Russia", "Moscow"}, {"Turkey", "Ankara"}, {"England", "London"}};
        Map<String, String> stateMap = new HashMap(Arrays.stream(stateArray).collect(Collectors.toMap(e -> e[0], e -> e[1])));
        List<Map.Entry> stateList = new ArrayList(stateMap.entrySet());
        
        Collections.sort(stateList, new Comparator<Map.Entry>() {
            
            @Override
            public int compare(Map.Entry e1, Map.Entry e2) {
                return e1.getKey().compareTo(e2.getKey());
            }
        });
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2017, 23:43
Ответы с готовыми решениями:

Получить значение по ключу из Map
У меня есть такой Map:{v1234546=} Подскажите, пожалуйста, как получить значение для ключа v12.

Сортировка MAP по 2 параметрам (ключ-значение)
Доброго времени суток, застрял на части задачки где необходимо отсортировать Map по 2 параметрам,...

Сортировка Map по количеству элементов в ArrayList (value)
Нужно отсортировать Map&lt;String, ArrayList&lt;String&gt;&gt; по количеству элементов в ArrayList'е....

Сортировка map по ключу и значению
Всем привет. Я создаю map и добавляю туда элементы: map&lt;int,string&gt; m; m=&quot;a&quot;; m=&quot;c&quot;; m=&quot;b&quot;; ...

5
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.11.2017, 00:17 2
Объясни свою задумку.
Вот вижу ты добавил массив стринг в мапу...ок
затем ты сделал лист Entry и запихнул туда данные из мапы... для чего?
а затем ты хочешь это сортировать, но у Entry нет естественной сортировки...

Расскажи, что хочешь увидеть в конце от листа

Добавлено через 3 минуты
stateMap.entrySet()
у тебя в ArrayList по сути добавляется такая конструкция

ArrayList<Set<Entry<String, String>>>. Set не сортируется

Добавлено через 3 минуты
Если тебе нужна сортировка, то используй сразу TreeMap<String, String>

Добавлено через 1 минуту
Java
1
2
3
4
5
 public static void main(String[] args) {
            String[][] stateArray = {{"Turkey", "Ankara"}, {"Russia", "Moscow"}, {"England", "London"}};
            Map<String, String> stateMap = new TreeMap<>(Arrays.stream(stateArray).collect(Collectors.toMap(e -> e[0], e -> e[1])));
            System.out.println(stateMap);
        }
0
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 49
13.11.2017, 00:29  [ТС] 3
Я изучаю все возможные сортировки Map.
В данном случае сортировка происходит: Map -> List - > Sort, Comparator -> LinkedHashMap.

Нашёл ошибку. Исправил Map.Entry на Map.Entry<String, String>

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class MapSortTest03 {
 
    public static void main(String[] args) {
 
        String[][] stateArray = {{"Russia", "Moscow"}, {"Turkey", "Ankara"}, {"England", "London"}};
        Map<String, String> stateMap = new HashMap(Arrays.stream(stateArray).collect(Collectors.toMap(e -> e[0], e -> e[1])));       
        List<Map.Entry<String, String>> list = new ArrayList(stateMap.entrySet());
        
        System.out.println(stateMap);
 
        Collections.sort(list, new Comparator<Map.Entry<String, String>>() {
            public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                return (o2.getKey()).compareTo(o1.getKey());
            }
        });
        
        Map<String, String> sortedMap = new LinkedHashMap();
        for(Map.Entry<String, String> entry : list) {
            sortedMap.put(entry.getKey(), entry.getValue());
        }
        
        System.out.println(sortedMap);
    }
}
0
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.11.2017, 00:54 4
тогда уж, коли используешь в программе lambda и stream и компаратор сделал бы так )))

Collections.sort(list, (o1, o2) -> o2 != null && o1 != null ? o1.getKey().compareTo(o2.getKey()) : 0);
1
0 / 0 / 0
Регистрация: 03.08.2015
Сообщений: 49
13.11.2017, 09:47  [ТС] 5
Красивая запись у вас получилась. Спасибо.

Посоветуйте, пожалуйста, ресурс, где можно почитать про построение лямбда выражений.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.11.2017, 09:59 6
Цитата Сообщение от molasar Посмотреть сообщение
Посоветуйте, пожалуйста, ресурс,
гугл
0
13.11.2017, 09:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2017, 09:59
Помогаю со студенческими работами здесь

Сортировка map по значению int в порядке убывания и частично по ключу char :)
Добрый день. Помогите, пожалуйста, отсортировать std::map &lt;char, int&gt; a. Например, у меня есть...

Удаления в Map по ключу
Столкнулся с проблемой пытаюсь удалить по ключу в map и по итератору но нечего не происходит. вот...

Не выводит ArrayList по ключу map
задание такое нужно ,чтобы открывался файл и по команде new (название множества) создавалось...

Map c++ вывод на консоль по ключу
Нужна помощь! У меня есть контейнер : map &lt;string, int&gt; m1 = { { &quot;wq&quot;, 1 }, { &quot;etr&quot;, 2 }, {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru