Выбор значений из ArrayList согласно ключу HashMap

220
01 февраля 2018, 17:58

Помогите пожалуйста в следующей проблеме. У меня есть список ArrayList, и связанная с ним карта HashMap.

Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
ArrayList phoneName = new ArrayList();
phoneName.add("8 800 2000 000");
phoneName.add("8 800 2000 100");
map.put("Егоров В.В.", phoneName);
phoneName.add("8 800 2000 200");
map.put("Андреев А.А.", phoneName);
phoneName.add("8 800 2000 300");
phoneName.add("8 800 2000 400");
phoneName.add("8 800 2000 500");
map.put("Михалёв Д.Д.", phoneName);

Мне нужно выбрать из ArrayList только те записи, которые соответствуют определённому ключу HashMap. Пробовал делать так, но это не работает.

for (Map.Entry<String, ArrayList<String>> entry : map.entrySet()) {
    if(map.containsKey("Егоров В.В.")) {
        System.out.println(entry.getValue());
    }
}
Answer 1

Вам нужно после добавления записи в HashMap создавать новый ArrayList. Используя один список, вы будете иметь по всем ключам в HashMap один и тот же ArrayList со всеми номерами.

Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
ArrayList<String> phoneName = new ArrayList<String>();
phoneName.add("8 800 2000 000");
phoneName.add("8 800 2000 100");
map.put("Егоров В.В.", phoneName);
phoneName = new ArrayList<String>();
phoneName.add("8 800 2000 200");
map.put("Андреев А.А.", phoneName);
phoneName = new ArrayList<String>();
phoneName.add("8 800 2000 300");
phoneName.add("8 800 2000 400");
phoneName.add("8 800 2000 500");
map.put("Михалёв Д.Д.", phoneName);

Получить по ключу значение из HashMap модно методом get.

String key = "Егоров В.В.";
System.out.println(map.get(key));  // [8 800 2000 000, 8 800 2000 100]

Пройтись по номерам в цикле можно так:

for(String value : map.get(key)){
    System.out.println(value);
}
READ ALSO
Чат для Android приложения

Чат для Android приложения

Хочу написать чат для Android приложения, но не могу решиться какие технологии использоватьБыли идеи использовать сервлет или sring mvc как серверную...

276
Как открыть проект Telegram в Android Studio?

Как открыть проект Telegram в Android Studio?

Пытаемся прокачать стандартный клиент телеграма под АндроидУже выполнил такие действия:

316
В чем отличие MVP от MVVM

В чем отличие MVP от MVVM

Не могу понять отличие реализации этих паттернов, кроме того, что в MVP вместе Presentera выступает ModelView , и подкручивается DataBinding

328