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)
}
}
``
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: