Koshkasobaka
@Koshkasobaka

Java. Как сделать, чтобы поиск в коллекции выводил все подходящие элементы?

В телефонном справочнике метод getRecord совершает поиск по фамилии, но он выдает только один контакт, а нужно, чтобы если есть несколько контактов с одинаковой фамилией, показывал их все.
import java.util.HashMap;

public class PhoneBook  {

private HashMap<String, String> phoneBook = new HashMap<>();

public PhoneBook() {}

public void addRecord(String surName, String phoneNumber) {
    phoneBook.put(surName, phoneNumber);
}

public String getRecord(String surName) {
    String phoneNumber = phoneBook.get(surName);
    if (phoneNumber == null) return "Запись не найдена";
    return phoneNumber;
}
}
  • Вопрос задан
  • 79 просмотров
Решения вопроса 2
@Cheypnow
Map по одному ключу хранит только одно значение. Нужно либо использовать другую коллекцию, либо хранить в Map список контактов.
Вариант с хранением списка в Map:
private HashMap<String, List<String>> phoneBook = new HashMap<>();

Добавлять соответственно нужно в список хранящийся по фамилии:
phoneBook.computeIfAbsent(surName, l -> new ArrayList<>()).add(phoneNumber);
Ответ написан
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Koshkasobaka, не надо хранить эту ерунду в виде мапы. Сделай нормальные типы: Contact, Phone, Contact содержит String name + List<Phone>(+ в будущем, например, List<Email>). Сделай ContactRepository, в котором храни список List<Contact>, а так же индекс Map<String, Contact> для поиска по имени(но вообще это в большинстве случаев будет преждевременной оптимизацией, можно и в списке по имени искать). Вот тогда будет нормально.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 350 000 до 400 000 ₽
ОТП Банк Москва
от 240 000 до 270 000 ₽
HighTeam Нижний Новгород
от 120 000 до 200 000 ₽