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

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

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

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

Сортирую 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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'е. например: string1:value1,value2,value3 ...

5
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.11.2017, 00:17
Объясни свою задумку.
Вот вижу ты добавил массив стринг в мапу...ок
затем ты сделал лист 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  [ТС]
Я изучаю все возможные сортировки 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
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.11.2017, 00:54
тогда уж, коли используешь в программе 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  [ТС]
Красивая запись у вас получилась. Спасибо.

Посоветуйте, пожалуйста, ресурс, где можно почитать про построение лямбда выражений.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
13.11.2017, 09:59
Цитата Сообщение от molasar Посмотреть сообщение
Посоветуйте, пожалуйста, ресурс,
гугл
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.11.2017, 09:59
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru