Estou desenvolvendo uma aplicação onde há um hashset de usuários e dentro deste hashset há um hashmap de amigos (Que herda usuários).
Ao remover um usuário do hashset, devo remover também o amigo correspondente ao usuário dentro do hashmap de amigos dos outros usuários.
Como posso fazer isso iterando o hashset?
Exemplo do código que implemento:
publicstaticvoidremoverUsuario(){if(usuarios.isEmpty())System.out.println("Nao ha usuarios registrados.");else{Stringlog;//Será usada também para remover o amigo no hashmapUsuariou=newUsuario();System.out.println("Digite o usuario que deseja remover: ");log=in.nextLine();Iteratori=usuarios.iterator();while(i.hasNext()){u=(Usuario)i.next();if(log.equalsIgnoreCase(u.getLogIn())&&usuarios.contains(u))i.remove();//Remove Usuário da HashSet// else *Caso este não seja o usuario que deve ser removido, remover o amigo correpondente a ele do hashmap dentro de usuários*}}}
Implemente o método equals e hashCode na classe Usuário. Assim você só precisa chamar o método hashSet.remove(usuario) e hashMap.remove(usuario) e ambos serão removidos.
Dê uma pesquisada no fórum sobre os dois métodos e você vai achar bons exemplos.
fishyhatguy
Acontece que Amigo (apesar de herdar de Usuários) e Usuário são classes diferentes, e os dados nas coleções tem referências a objetos distintos. Isso então não ajuda muito ಠ_ಠ
Não há como fazer isso usando i.next()?
Gustavo_MPO
Se entendi o que vc quer fazer, basta vc iterar sobre o map de amigos dentro de cada nó do hashset de usuarios procurando pelo “usuario amigo” a ser removido.
fishyhatguy
sim, mas há duas observações:
1-Não há como iterar o map, mas pra isso há o login do usuário, que é a key correspondente no hashmap
2-O problema é que não consigo acessar o hashmap enquanto itero o hashset.
Gustavo_MPO
Na classe HashMap existe um metodos para obtenção de sets tanto de keys como values, vc pode iterar para qual achar mais adequado.
Sobre não conseguir acessar o hashMap na iteração do hashset, não entendo o porque.
Imagino que sua classe usuario tenha um hashmap amigos, não?
Se for isso, basta vc obter o hashmap (u.getHashMap() ou qualquer que seja o metodo que vc criou para acessar o hashmap) e iterar sobre ele (keySet ou values).
fishyhatguy
Eu tento pegar o usuario numa variável (u) e retirar o amigo por ela, mas por alguma razão não funciona. Por isso tento tirar direto do HashSet.
Eu tentei fazer assim:
while(i.hasNext()){u=(Usuario)i.next();if(log.equalsIgnoreCase(u.getLogIn())&&usuarios.contains(u))i.remove();//Remove Usuário da HashSet elseu.getListaAmigos().remove(log);/**Caso este não seja o usuario que deve ser removido, remover o amigo correpondente a ele do hashmap dentro de usuários* log = key do HashMap que corresponde ao login do usuario que é removido */}
Gustavo_MPO
Verifique se a key é a correspondente em seu HashMap de amigos mesmo, veja o código abaixo, a remoção de um nó na iteração de um set (com hashmap dentro) funciona perfeitamente: