@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;
}
}
  • Вопрос задан
  • 392 просмотра
Решения вопроса 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> для поиска по имени(но вообще это в большинстве случаев будет преждевременной оптимизацией, можно и в списке по имени искать). Вот тогда будет нормально.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
26 апр. 2024, в 09:18
500 руб./в час
26 апр. 2024, в 06:46
1500 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект