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

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

Похожие вопросы