как добавить методы в HashMap (Phone Book

159
20 ноября 2017, 17:31

Пишу программу Телефонная книга и не получаются следующие методы. HashMap у меня состоит из класса Юзер и сета Контактов (с номерами телефонов домашний, мобильный).

static Map<User,Set<Contact>> phoneBook = new HashMap<>();
    Contact firstContact = new Contact(532564856);
    Set<Contact> setOfContacts = new HashSet<>();
 ...

searchByName - метод должен делать поиск по имени

static void searchByName(String name) {
        if (phoneBook.containsKey(name))
            System.out.println(phoneBook.get(name));
        else{
            System.out.println("Sorry. The contact is not exist");
        }
    }

searchByNumber - метод должен делать поиск по мобильному/домашнему номеру телефона

static void searchByNumber(int num) {
    if (phoneBook.containsValue(num)) {
        System.out.println(phoneBook.get(num));
    }else
        System.out.println("Number is not found");
}

printAllContacts - метод должен выводить все контакты (имя - номер или номера)

static void printAllContacts(){
        System.out.println("ALL CONTACTS " + phoneBook);
        System.out.println();
    }

addNewContact - добавить новый контакт

static void addNewContact(Set<Contact> addNewContact, Contact contact){      
        if (addNewContact.contains(contact)) {
            addNewContact.remove(contact);
        }
        addNewContact.add(contact);
    }
    static void deleteContact (String contactToDelete) {
        phoneBook.remove(contactToDelete);
        System.out.println("Deleted contact: "+contactToDelete);
    }
Answer 1

Мапа у вас содержит ключ - user объект, значение - set

Map<User,Set<Contact>> phoneBook

А вы пытаетесь искать по String

static void searchByName(String name) {
        if (phoneBook.containsKey(name))

Можно ли среди людей найти строчку? Вряд ли.

Вам надо либо переделать Map<User,Set<Contact>> на Map<String, Integer>, тогда ваши методы начнут работать.

Либо изменить методы на

searchByUser(User user);
searchBySetContect(Set<Contact>);

Либо последний вариант, который уберет всю полезность HashMap

static void searchByName(String name) {
      for(User user : phoneBook.keySet()){
        if (user.getName.equals(name))
        ...

И по поводу этого метода:

addNewContact - добавить новый контакт

static void addNewContact(Set<Contact> addNewContact, Contact contact){      
    if (addNewContact.contains(contact)) {
        addNewContact.remove(contact);
    }
    addNewContact.add(contact);
}

Set содержит только уникальные значения, т.е.

    if (addNewContact.contains(contact)) {
        addNewContact.remove(contact);
    }

ненужно, т.к. Set сам все сделает (Если в классе Contact переопределены методы equals и hashCode)

READ ALSO
Циклическая зависимость maven модулей!

Циклическая зависимость maven модулей!

есть несколько модулей в maven

201
.split() не делит строку

.split() не делит строку

есть строка cbr-coa-dic:Osv_Dt_A_10501$dim-int:Nacz_Inostr_Valyuta_Axis/mem-int:Nacz_Valyuta_Rf_Member ее необходимо раздеить по символу $ пробовал делить String[] soch = fsplit( "$"); но деления...

143
Приведение типов при ссылке на ресурсы

Приведение типов при ссылке на ресурсы

В Activity создал переменную

156