Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
1

Map.Entry

06.07.2018, 09:56. Показов 2795. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Господа. Может кто-нибудь более менее доступно разъяснить про Map.Entry

Джавадок пять раз перечитал - никак не отдуплю. (в исходники не полезу - джавой занимаюсь чуть больше месяца по самоучителям ))))
Началось все с того, что мне мой HashMap понадобилось отсортировать.
Я его перегоняю в List:
Java
1
List sortList = new ArrayList(myMap.entrySet());
Т.е. я из Map изначально делаю Set, а потом уже создаю List из Set, так?

Насколько я понимаю изначально в HashMap находятся элементы класса Entry, представляющие из себя как раз пару ключ-значение. А Entry - это внутренний класс в данном случае HashMap.

Так что в результате является элементом sortList?

Java
1
sortList.get(0).getClass()
дает вот это:
class java.util.HashMap$Node
Что это?

Добавлено через 25 минут
угу... главное спросить.
оказывается в HashMap внутренний класс Node реализующий Entry из Map

Но как мне обратиться к элементам?
Если я запускаю:

Java
1
2
3
for (HashMap.Entry element: sortList){
                 
             };
То компилятор ругается - Object cannot be converted to Entry

А HashMap.Node - не публичный.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2018, 09:56
Ответы с готовыми решениями:

Ошибка с циклом Map.Entry entry:hashMap.entrySet
Пытаюсь спарсить сайт со списком и подробнее о каждом элементе. Всё делал по уроку на youtube. При...

Добавить после каждого entry-го вхождения
Добавить после каждого entry-го вхождения подстроки oldSubstr подстроку newSubstr, проверить...

реализация Map
Доброго времени суток!Столкнулся со следующей задачей: ...

Итераторы в Map
Здравствуйте. Вопрос по коллекциям. Почему для множества метод iterator() вызывается так:...

13
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
06.07.2018, 10:05 2
какая разница что там реализует Entry. Метод entrySet() возвращает сет из Entry -
Java
1
public Set<Map.Entry<K,V>> entrySet() {
С ним и работай, у Entry есть методы getKey() и getValue()
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
06.07.2018, 10:12 3
alexjun, а главное напиши ты чего хочешь добиться то?
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
06.07.2018, 10:35  [ТС] 4
Я же написал - мне нужно отсортировать мой HashMap по значению.

Добавлено через 8 минут
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public class Javawords {
 
    public static void main(String[] args) {
        File doc = new File("javawords1.txt");
        //File doc = new File("test.txt");
        Map <String, Integer> myMap = new HashMap <>(3000);
        
        try {
            Scanner scan = new Scanner(new FileInputStream(doc));
            
            while (scan.hasNext()){
                String word=scan.next().toLowerCase();
                word=word.replaceAll("[^a-zA-Z&&[^-]]", " ");
                if (myMap.containsKey(word)){
                    myMap.put(word, myMap.get(word)+1);
                }
                else {
                    myMap.put(word, 1);
                }
                    
       
         
                
            }
        } catch (FileNotFoundException ex) {
            System.out.println("Косяк с файлом");
            Logger.getLogger(Javawords.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        for(Entry<String, Integer> pair : myMap.entrySet()) // ??????????????????????
        {
            System.out.println(pair);
        }
        
        List sortList = new ArrayList(myMap.entrySet());
 
    class Compar implements Comparator <Entry>{
 
            @Override
            public int compare(Entry o1, Entry o2) {
            return (int)(o2.getValue())-(int)(o1.getValue()); 
            
            }
        
    }
 
        Collections.sort(sortList, new Compar());
        
       try {
            FileWriter writer = new FileWriter("outfile.txt",false);
            for ( int i=0; i<sortList.size();i++){
              System.out.println(sortList.get(i).toString());
              writer.write(sortList.get(i).toString()+"\n");
              
            
        } catch (IOException ex) {
            System.out.println("Косяк с файлом out");
            Logger.getLogger(Javawords.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
Собственно вот. Считаю количество разных слов в файле.
В принципе, все работает.
Но компаратор, сделан через одно место.
Да и выводит пару в формате "exampleWord=25", что мне не очень удобно.
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
06.07.2018, 11:37 5
Цитата Сообщение от alexjun Посмотреть сообщение
Я же написал - мне нужно отсортировать мой HashMap по значению.
ну так хешмап подразумевает что порядка нет, почему тримап не взял?

если просто для вывода то вот так можно (там же и компаратор)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
        Map<String, Integer> myMap = new HashMap<>();
        myMap.put("O", 5);
        myMap.put("N", 3);
        myMap.put("I", 2);
        myMap.put("B", 1);
        myMap.put("G", 4);
        myMap.put("!", 7);
        System.out.println("Map as is:");
        myMap.forEach((k, v) -> System.out.println(k + " = " + v));
        System.out.println("Sorted map:");
        myMap.entrySet().stream().sorted(Comparator.comparingInt(Map.Entry::getValue)).forEach(e -> System.out.println(e.getKey() + " = " + e.getValue()));
    }
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
06.07.2018, 11:50  [ТС] 6
Цитата Сообщение от Welemir1 Посмотреть сообщение
ну так хешмап подразумевает что порядка нет, почему тримап не взял?
А не знаю... Я про него мало что знаю. Нужно почитать.

Цитата Сообщение от Welemir1 Посмотреть сообщение
если просто для вывода то вот так можно (там же и компаратор)
Ну у меня нет как таковой задачи решить вопрос любыми способами. Я сам себе ее выдумал и решаю теми средствами которые пока знаю. Чего не знаю лезу разбираться потихоньку.

Вот и заклинило на том что не могу к элементу ListArray обратиться. Компилятор считает что там просто обджект и ниодного метода от энтри не дает использовать.

А с лямбда выражениями у меня вообще пока туго. Так что я толком даже не могу понять что вы предложили, только в общих чертах.
Учимся...
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
06.07.2018, 11:57 7
Цитата Сообщение от alexjun Посмотреть сообщение
Вот и заклинило на том что не могу к элементу ListArray обратиться.
не вижу его у тебя в коде
0
494 / 340 / 134
Регистрация: 14.06.2016
Сообщений: 658
06.07.2018, 12:00 8
Наверное потому, что надо List<Map.Entry<String, Integer>> sortList, a не raw type писать.
1
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
06.07.2018, 12:09  [ТС] 9
Цитата Сообщение от Welemir1 Посмотреть сообщение
не вижу его у тебя в коде
так я убрал.

изначально вместо sortList.get(i).toString() я планировал sortList.get(i).getKey и sortList.get(i).getValue использовать.

И вместо for ( int i=0; i<sortList.size();i++) форыч использовать.

Добавлено через 5 минут
Цитата Сообщение от vcrop Посмотреть сообщение
Наверное потому, что надо List<Map.Entry<String, Integer>> sortList, a не raw type писать.
О! Круто, заработало ))))
А подскажите, что это поменяло или где об этом можно почитать?
0
494 / 340 / 134
Регистрация: 14.06.2016
Сообщений: 658
06.07.2018, 12:14 10
Указывай, чем list параметрирован, что там лежать будет. Так как ты написал, подразумевается, Object-ы лежат, а ты пытаешься их как Entry достать.
0
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
06.07.2018, 12:31  [ТС] 11
Цитата Сообщение от vcrop Посмотреть сообщение
Указывай, чем list параметрирован, что там лежать будет. Так как ты написал, подразумевается, что там лист Object-ов, а ты пытаешься их как Entry достать.
Т.е. я правильно понимаю, что проблема в том, что я создаю объект (sortList) и его элементами указываю параметризированный класс. Соответственно и в объявлении я должен указать, что там за параметры.
Иначе по мнению компилятора я могу передать туда класс с другими параметрами, под которые не реализован тот или иной метод, который бы работал с первыми. Правильно?
0
494 / 340 / 134
Регистрация: 14.06.2016
Сообщений: 658
06.07.2018, 12:38 12
Любая ссылка на "обобщенные классы java". Думаю, без труда разберешься.
1
37 / 35 / 9
Регистрация: 13.02.2017
Сообщений: 205
06.07.2018, 12:45  [ТС] 13
Цитата Сообщение от vcrop Посмотреть сообщение
Любая ссылка на "обобщенные классы java". Думаю, без труда разберешься.
Спасибо большое. Дальше разберусь.
Вопрос закрыт.
0
Эксперт функциональных языков программированияЭксперт Java
4486 / 2721 / 485
Регистрация: 28.04.2012
Сообщений: 8,590
06.07.2018, 13:08 14
Цитата Сообщение от Welemir1 Посмотреть сообщение
почему тримап не взял?
Как он поможет отсортировать по значению, а не по ключу?
0
06.07.2018, 13:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2018, 13:08
Помогаю со студенческими работами здесь

Работа с Map
Здрастуйте, у меня есть вот такой Map: Map&lt;String, Map&gt; main = new HashMap&lt;&gt;(); Map &lt;Ingredient,...

Работа с Map
Доброго времени суток. Как подобное можно реализовать на Java? #include &lt;iostream&gt; #include...

Вложенные Map
Появилась задача по программированию сделать некое подобие книжной библиотеки. Есть библиотека, в...

Из массива в map
У меня есть элементы массива! Например т: 0100 как сделать, что бы был map c ключом т и...


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

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