POO-ITBA / 2024_01

Consultas 1C 2024
0 stars 0 forks source link

Duda ej 2 2023 1Q #26

Open lucasdicandi opened 3 months ago

lucasdicandi commented 3 months ago

https://docs.google.com/document/d/1DDu_AwgDf2KwV3xwwVKR493l4EWKW5qr_vIvZEu9FHA/edit?usp=sharing

En este caso AddressBookGroup tendria q hacer override a equals y hashcode para q se pueda usar de key?

aca dejo mi implementacion completa (seguro hay algun error de sintaxis porq lo hice en notepad) si hay algun otro error q puedas marcar avisame:



//(que puede modificarse)
public class Contact{
   private String name;
   private final String phoneNumber;

   public Contact(String name, String phoneNumber) {
       this.name = name;
       this.phoneNumber = phoneNumber;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public String getPhoneNumber() {
       return phoneNumber;
   }

   public int compareTo(Contact o){
        return name.compareTo(other.getName());
   }

   @Override
   public String toString() {
       return "| %s has %s as phone number |".formatted(name, phoneNumber);
   }

}

//AddressBookGroup (que puede modificarse)
public class AddressBookGroup implements Comparable<AddressBookGroup>{
   private final String name;

   public AddressBookGroup(String name) {
       this.name = name;
   }

    public String getName(){
       return name;
    }

    public int compareTo(Contact o){
        return name.compareTo(other.getName());
   }

    @Override
    public boolean equals(AddressBookGroup group){
       return this == group || (obj instanceof AddressBookGroup && name = group.getName())
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

public class AddressBook{

    private SortedMap<AddressBookGroup, SortedMap<String, Contact>>> map = new TreeMap<>();

    public void addContact(AddressBookGroup group, String nameToAdd, String numberToAdd){
        map.putIfAbsent(group, new TreeMap<String,Contact>());
        map.get(group).put(nameToAdd, new Contact(nameToAdd, numberToAdd));
    }

    // Arroja un error porque no existe el contacto Mary en el grupo Work
    public Contact getContact(AddressBookGroup group, String nameToSearch){
        if(!validateContact(group, nameToSearch)){
            throw new IllegalArgumentException();
        }

        return map.get(group).get(nameToSearch);
    }

    // Obtiene todos los contactos del grupo Personal
    // en orden alfabético por nombre del contacto

    public List<Contact> getAllContacts(AddressBookGroup group){
        List<Contact> toReturn = new ArrayList<>();
        for(String name : map.get(group).keySet()){
            toReturn.add(map.get(group).get(name));
        }
        return toReturn;
    }

    // Obtiene todos los contactos de todos los grupos
    // en orden alfabético por nombre del grupo
    // y desempata alfabético por nombre del contacto
    public List<Contact> getAllContacts(){
        List<Contact> toReturn = new ArrayList<>();

        for(AddressBookGroup elem : map.keySet()){
            toReturn.addAll(getAllContacts(elem))
        }

        return toReturn;

    }

    // Arroja un error porque no existe el contacto Mary en el grupo Work
    public void renameContact(AddressBookGroup group, String oldName, String newName){
        if(!validateContact(group, nameToSearch)){
            throw new IllegalArgumentException();
        }
        map.replace(group, oldName, newName);
    }

    public boolean validateContact(AddressBookGroup group, String nameToSearch){
        return map.getOrDefault(group, new TreeMap<>()).containsKey(nameToSearch)
    }

}
``