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

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

14.11.2012, 21:00. Показов 13834. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru