Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
1 / 1 / 1
Регистрация: 03.02.2015
Сообщений: 78

ArrayList как Value для HashMap

03.12.2017, 18:55. Показов 6872. Ответов 5

Студворк — интернет-сервис помощи студентам
Что надо изменить, чтобы List внутри HashMap дополнялся, а не заменялась лишь первая его строка?

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
String [] roles= {
                "Городничий",
                "Аммос Федорович",
                "Артемий Филиппович",
                "Лука Лукич"};
String [] textLines={
                "Городничий: Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор.",
                "Аммос Федорович: Как ревизор?",
                "Артемий Филиппович: Как ревизор?",
                "Городничий: Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.",
                "Аммос Федорович: Вот те на!",
                "Артемий Филиппович: Вот не было заботы, так подай!",
                "Лука Лукич: Господи боже! еще и с секретным предписаньем!"};
Map<String, List<String>> textSort = new HashMap<>();
        for (int i = 0; i < textLinesIndexed.size(); i++) {
            StringBuffer role = new StringBuffer();
            StringBuffer text = new StringBuffer(textLinesIndexed.get(i));
 
            role.insert(0, text.substring(0, text.indexOf(":")));
            text.delete(0, text.indexOf(":")+2);
 
            textSort.put(role.substring(0), Arrays.asList(new String(text)));
 
            out.println(textSort.get("Городничий"));
        }
Текущий вывод:
[Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.]

Мои ожидания к выводу:
[[Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор.][Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.]]
или
[Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор., Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2017, 18:55
Ответы с готовыми решениями:

Как перенести данные с ArrayList в HashMap при этом погрупировать их?
Есть список елементов, их нужно погрупировать за условием (predicate.test()) и внести в HashMap. Ключ будет равен результату...

ArrayList<HashMap<String,String>> get() - перебирает все элементы
Есть метод getList() который возвращает значение типа ArrayList&lt;HashMap&lt;String,String&gt;&gt; Если я выбираю из этого списка элемент методом...

Для чего написано: ArrayList<person> people = new ArrayList<>();
package com.company; import java.util.ArrayList; import java.util.Iterator; public class Main { public static void...

5
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
03.12.2017, 19:06
List<String> value = textSort.get(role.substring(0));
if (value != null) value.add(String что-то)
else textSort.put(role.substring(0), Arrays.asList(new String(text)));

Добавлено через 2 минуты
в Map, если пытаешься добавить такой же ключ, который был, он его перезатирает новым вхождением
Если нужно не перезатирать, надо проверять его наличие, или contains или метод get(key) возвращает значение, в нашем случае лист или null, если ключа нет ещё

Добавлено через 4 минуты
Даже так:
Java
1
2
3
4
5
6
   List<String> value = textSort.get(role.substring(0));
   if (value != null) {
       value.add(new String(text));
   } else {
       textSort.put(role.substring(0), new ArrayList<>().add(new String(text)));
   }
0
1 / 1 / 1
Регистрация: 03.02.2015
Сообщений: 78
03.12.2017, 19:08  [ТС]
Цитата Сообщение от ArtemFM Посмотреть сообщение
если пытаешься добавить такой же ключ, который был, он его перезатирает новым вхождением
Я это знаю и пытаюсь обойти таким способом , но не понимаю, как сделать это правильно.
0
1 / 1 / 1
Регистрация: 03.02.2015
Сообщений: 78
03.12.2017, 19:14  [ТС]
То есть мне нужен индекс массивов.
Проблема в том, что я плохо представляю, как к этим массивам обращаться
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
03.12.2017, 20:25
textLinesIndexed - что это за коллекция?

Добавлено через 3 минуты
И вообще расскажи, что ты хочешь сделать? Суть задумки

Добавлено через 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
25
26
27
28
29
30
31
32
33
import java.util.*;
 
public class Task014 {
    public static void main(String[] args) {
        String[] textLines = {
                "Городничий: Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор.",
                "Аммос Федорович: Как ревизор?",
                "Артемий Филиппович: Как ревизор?",
                "Городничий: Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.",
                "Аммос Федорович: Вот те на!",
                "Артемий Филиппович: Вот не было заботы, так подай!",
                "Лука Лукич: Господи боже! еще и с секретным предписаньем!"};
 
        Map<String, List<String>> textSort = new HashMap<>();
        for (int i = 0; i < textLines.length; i++) {
            String[] arrStr = textLines[i].split(":{1}");
            if (arrStr.length >= 2) {
                if (!textSort.containsKey(arrStr[0])) {
                    textSort.put(arrStr[0], new ArrayList<>());
                }
                List<String> value = textSort.get(arrStr[0]);
                value.add(arrStr[1]);
            }
        }
 
        for (Map.Entry<String, List<String>> entry : textSort.entrySet()) {
            System.out.println(entry.getKey() + ": ");
            for (String value : entry.getValue()) {
                System.out.println("   " + value);
            }
        }
    }
}
Добавлено через 11 минут
Даже нет...поправил:

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
import java.util.*;
 
public class Task014 {
    public static void main(String[] args) {
        String[] textLines = {
                "Городничий: Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор.",
                "Аммос Федорович: Как ревизор?",
                "Артемий Филиппович: Как ревизор?",
                "Городничий: Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.",
                "Аммос Федорович: Вот те на!",
                "Артемий Филиппович: Вот не было заботы, так подай!",
                "Лука Лукич: Господи боже! еще и с секретным предписаньем!"};
 
        Map<String, List<String>> textSort = new HashMap<>();
        for (int i = 0; i < textLines.length; i++) {
            int index = textLines[i].indexOf(":");
            if (index != -1) {
                String name = textLines[i].substring(0, index).trim();
                String say = textLines[i].substring(index + 1, textLines[i].length()).trim();
                if (!textSort.containsKey(name)) {
                    textSort.put(name, new ArrayList<>());
                }
                List<String> value = textSort.get(name);
                value.add(say);
            }
        }
 
        for (Map.Entry<String, List<String>> entry : textSort.entrySet()) {
            System.out.println(entry.getKey() + ": ");
            for (String value : entry.getValue()) {
                System.out.println("   " + value);
            }
        }
    }
}
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
03.12.2017, 22:23
год назад кому-то такую же хрень делал, судя по всему
Цитата Сообщение от xoraxax Посмотреть сообщение
private static final String[] lines = {
* * * * * * "Городничий: Я пригласил вас, господа, с тем, чтобы сообщить вам пренеприятное известие: к нам едет ревизор.",
* * * * * * "Аммос Федорович: Как ревизор?",
* * * * * * "Артемий Филиппович: Как ревизор?",
* * * * * * "Городничий: Ревизор из Петербурга, инкогнито. И еще с секретным предписаньем.",
* * * * * * "Аммос Федорович: Вот те на!",
* * * * * * "Артемий Филиппович: Вот не было заботы, так подай!"
* * };
public static void main (String... args) {
* * * * Map<String, List<String>> collect = Arrays.stream(lines).map(App:arse)
* * * * * * * * .collect(Collectors.groupingBy(Pair::get Left,
* * * * * * * * * * * * Collectors.mapping(Pair::getRight, Collectors.toList())));
* * * * System.out.println(collect);
}
private static Pair<String, String> parse(String line) {
* * * * int index = line.indexOf(':');
* * * * return Pair.of(line.substring(0,index).trim(), line.substring(index+1).trim());
* * }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2017, 22:23
Помогаю со студенческими работами здесь

Вставка HashMap в HashMap меняет все элементы
Вставляю HashMap в HashMap генерируя карту доски для шахмат, привожу тестовый пример, вставляется только данные последней ячейки доски, с...

Как представить элементы java.ArrayList содержащие другие java.ArrayList в виде XML - XSL?
Здравствуйте Вопрос: Подскажите пожалуйста чайнику, как можно представить элементы java.ArrayList содержащие другие java.ArrayList...

Как правильно называется класс хранящий данные для ArrayList
Есть ArrayList в нем элементы типа MyClass. MyClass предназначен для хранения данных, в нем 2 поля. Как такой класс правильно называют?

Сравнение для HashMap
Здравствуйте! Подскажите, пожалуйста, как этот код будет выглядеть на Java. Очень нужно. map&lt;char, int&gt; roman; for (int i = 0;...

Как вытянуть нужную информацию со стрингового Arraylist-a или распарсить его для вывода нужной информации?
У меня стоит вот такая вот задача: Есть товар он имеет поля - (id, name, cost, type, owner) Сохранить все товары в файл. ето я сделал...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru