Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/68: Рейтинг темы: голосов - 68, средняя оценка - 4.71
24 / 24 / 13
Регистрация: 19.05.2010
Сообщений: 151

Сортировка MAP по 2 параметрам (ключ-значение)

14.11.2012, 21:00. Показов 13813. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, застрял на части задачки где необходимо отсортировать Map по 2 параметрам, сортировка по значению прошла успешно, как расширить чтобы сортировало еще и по ключу?

пример входа а=1 c=2 d=3 f=1
выход должен получиться d=3 c=2 a=1 f=1 (важнее сортировка по значению)

мой код сейчас:
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 SortByValue {
 
    public ArrayList otsort;
 
    public void sort(Map map) {
 
        List<Entry<Character, Integer>> entries = new ArrayList<Entry<Character, Integer>>(map.entrySet());
        Collections.sort(entries, new Comparator<Entry<Character, Integer>>() {
            @Override
            public int compare(Entry<Character, Integer> e1, Entry<Character, Integer> e2) {
                int v1 = e1.getValue(); // can be NPE when autounboxing
                int v2 = e2.getValue();
                return (v1 < v2) ? 1 : (v1 == v2) ? 0 : -1;
            }
        });
        System.out.println("sorted by value");
        for (Entry<Character, Integer> e : entries) {
            System.out.println("" + e.getKey() + " " + e.getValue());
            
            
        }
otsort= (ArrayList) entries; //это результат,отправляем в класс main
    }
}
Спасибо за любую помощь.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.11.2012, 21:00
Ответы с готовыми решениями:

Как взять значение и ключ из Map?
мне нужно сравнить все значения в мэпе с определенным значением. мне нужно взять каждый ключ и каждое значение из него. как это сделать?...

Поменять местами ключ и значение в map
Ребят, как в map поменять местами ключ и значение? Мне из файла нужно считывать слова и потом вывести все слова которые встретились (не...

Как поменять ключ в map на другой, сохранив значение?
Задача: нужно выборочно поменять любой ключ в словаре map, сохранив при этом его значение. Например, есть пара ключ значение &quot;111...

5
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.11.2012, 23:03
вам бы неплохо в исходник мапа заглянуть
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
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
 
public class MapSort {
 
    public static void main(String[] args) {
        Map<Character, Integer> m = new HashMap<Character, Integer>() {
            {
                put('b', 2);
                put('a', 3);
                put('c', 1);
            }
        };
 
        System.out.println(m);
        m = new TreeMap<Character, Integer>(m);
        System.out.println(m);
        Map<Character, Integer> n = new TreeMap<Character, Integer>(new Comparator<Character>() {
 
            @Override
            public int compare(Character o1, Character o2) {
                return (int) o2 - (int) o1;
            }
        });
        n.putAll(m);
        System.out.println(n);
 
    }
}
1
24 / 24 / 13
Регистрация: 19.05.2010
Сообщений: 151
15.11.2012, 06:34  [ТС]
благодарю) очень помогли! добавив
m = new TreeMap<Character, Integer>(m); получил что хотел ( видимо в Treemap по дефолту сортировка по ключу)
0
 Аватар для Skipy
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
15.11.2012, 14:05
Цитата Сообщение от semakk Посмотреть сообщение
видимо в Treemap по дефолту сортировка по ключу
Он не "видимо", он по определению сортирует по ключу, если не указан Comparator: http://docs.oracle.com/javase/... eeMap.html

The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.
0
24 / 24 / 13
Регистрация: 19.05.2010
Сообщений: 151
19.11.2012, 22:15  [ТС]
Решил не создавать новую тему, задача та же, появилась подзадача.
Вообщем есть главный класс в котором вызываются методы обработки текстового файла, нужно сделать выбор метода
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
package start;
 
import java.io.FileNotFoundException;
import java.io.IOException;
 
public class Start{
 
    public static void main(String[] args) throws FileNotFoundException, IOException, Exception {
 
        String nfr = "/home/1.txt";
        String nfs = "/home/2.txt";
        String[] fr = new Reader().readAndSplit(nfr);
 
        StatShow stat = new StatShow();
        stat.toprocess(fr);
        
        CountSample cou = new CountSample();
        cou.toprocess(fr);
        
        CountAll caw = new CountAll();
        caw.toprocess(fr);
        
    }
}
Естественно в голове только if /case но необходимо реализация через pattern strategy, а в самой понятной реализации которую я нашел присутствует CASE, что ж делать ? спасибо за помощь
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
package chapt05.strategy;
 
public class Sorting {
 
private Operation operation = null;
 
public Sorting(int operation){
 
switch(operation) {
 
case 1: this.operation = new SortByMax();
 
break;
 
case 2: this.operation = new SortByMin();
 
break;
 
default: System.out.println(
 
"Такая операция отсутствует"); }
 
}
 
public void sorting(int[] mass) {
 
if (operation != null) operation.sort(mass);
 
else return;
 
}
 
}
 
/*пример # 33 : использование шаблона Strategy: Main.java */
 
package chapt05.strategy;
 
public class Main {
 
public static void main(String args[]) {
 
int mass[] = {28, 9, 71, 8, 35, 5, 51};
 
Sorting cont1 = new Sorting(1);
 
Sorting cont2 = new Sorting(2);
 
cont1.sorting(mass);
 
cont2.sorting(mass);
 
}
 
}
0
24 / 24 / 13
Регистрация: 19.05.2010
Сообщений: 151
23.11.2012, 08:50  [ТС]
задание понял не корректно или поставили так) вообщем по данному примеру и надо было сделать ( а я понял что case/if в выборе стратегии вообще под запретом)
результат выложу мало ли кому интересно
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package test1;
 
public class mtry {
 
    private Process operation = null;
 
    @SuppressWarnings("empty-statement")
    public ChooseStrat(int _operation)
            throws MyException {
        try {
            if (_operation == '1' || _operation == '2' || _operation == '3' || _operation == '4') {
                switch (_operation) {
 
                    case '1':
                        this.operation = new ProcCountAllWords();
 
                        break;
 
                    case '2':
                        this.operation = new ProcCountUniq();
 
                        break;
 
                    case '3':
                        this.operation = new ProcReverser();
 
                        break;
 
                    case '4':
                        this.operation = new ProcStatShow();
 
                        break;
                }
            } else {
                throw new MyException();
            }
        } catch (MyException e) {
            System.out.println("Необходимо выбрать номер 1-4 " +e);
        }
 
    }
    public Object startprocess(String[] a) {
 
        return operation.toprocess(a);
    }
}
----------------------------------------------------------------------------------
package mtry;
 
import java.io.FileNotFoundException;
import java.io.IOException;
 
public class mtry {
 
    public static void main(String[] args) throws MyException {
        try {
 
            String nfr = "/home/1.txt";
            String nfs = "/home/2.txt";
 
            String[] fr = new Reader().readAndSplit(nfr);
            System.out.print("Введите номер операции ");
            int z = System.in.read();
 
            ChooseStrat cont1 = new ChooseStrat(z);
           
            Object res = cont1.startprocess(fr);
            new Writer().saveToFile(res, nfs);
 
        } catch (FileNotFoundException e) {
 
            System.out.println("Файл не найден");
 
        } catch (IOException ex) {
            System.out.println("Ошибка при записи в файл");
 
        } catch (NullPointerException e1) {
            System.out.println("Перехвачено NPE" + e1);
        }
 
 
    }
}
еще раз спасибо за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2012, 08:50
Помогаю со студенческими работами здесь

Составной ключ для std::map
Есть класс. Нужно его сделать ключем для карты. class Vertex{ public: double X,Y,Z; Vertex(double x=0,double y=0, double...

Контейнер Map. Использование класса как ключ
class A{ int X;}; class B{ public: int y;}; int main() { A objA; B objB; map&lt;A,B&gt; m; m.y=1; //kak? ...

Std::map ключ из нескольких значений (одно из которых может быть не заполненно)
Добрый день. Есть следующий вопрос. У меня есть некие 2 транзакции, которые необходимо связать между собой. Связываю я их по id,...

std::map find. Получить ключ(элемент) и как записать все данные при объявлений?
Вопрос первый: как получить ключ контейнера map по данным? например: // id, name std::map&lt;int, string&gt; BookMap; BookMap...

Вычисляет ли словарь хеш, если ключ - числовое значение или в таком случае за хеш берется сам ключ?
Нужен Dictionary&lt;int,Dictionary&lt;int,string&gt;&gt; (т.к. максимальное значение ключа не более 40 можно заменить на...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru