Vc jah subscreveu o metodo equals? e acho que vc deveria passar um activeDirectoryDTO como parametro do metodo, deve ser isso.
Abraços.
K
keltonribeiro
Essa função da collection (contains) verifica se existe o objeto na outra collection … Nao precisando usar o equals …
E estou passando um parametro de um activeDirectoryDTO …
for(activeDirectoryDTOobjLDAP:listaNomesLdap){
P
Paulo_Aguiar
é o seguinte, como sua Collection é do tipo activeDirectoryDTO,
só que ai ela nao vai saber qual logica vc quer usar pra diferenciar se um objeto activeDirectoryDTO é igual a outro activeDirectoryDTO, entao vc precisa ensinar isso, subscrevendo o metodo equals. não se esqueca de instanciar os objetos antes chamar qualquer metodo.
Esqueci, pelo que notei vc quer sejam iguais quando o nome do usuario for igual, então…
Lavieri
keltonribeiro:
Essa função da collection (contains) verifica se existe o objeto na outra collection … Nao precisando usar o equals …
E estou passando um parametro de um activeDirectoryDTO …
for(activeDirectoryDTOobjLDAP:listaNomesLdap){
engano seu…
collection.contains(item);
faz um iterator pela collection mais ou menos assim
for (Object o : collection)
if (o.equals(item))
return true;
return false;
ou seja… se vc não implementar o equals… o resultado pode ser diferente do esperado…
K
keltonribeiro
Amigo ,
Posso estar falando besteira , mas o que quero fazer é que a minha collection seja percorrida e tente achar o valor do meu objeto do tipo collection … E não simplesmente verificar se um valor é igual a outro …
Lavieri
keltonribeiro:
Amigo ,
Posso estar falando besteira , mas o que quero fazer é que a minha collection seja percorrida e tente achar o valor do meu objeto do tipo collection … E não simplesmente verificar se um valor é igual a outro …
</blockquote>
e como vc acha que ele encontra ?? ele encontra verificando se o objeto que vc passou é igual a algum objeto que esta la dentro da collection … o.O
e para tal ele testa essa igualdade atraves de equals
Lavieri
da uma olhada como a classe AbstractCollection implementa equals(Object o)
packagejava.util;publicabstractclassAbstractCollection<E>implementsCollection<E>{//..../** * {@inheritDoc} * * <p>This implementation iterates over the elements in the collection, * checking each element in turn for equality with the specified element. * * @throws ClassCastException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */publicbooleancontains(Objecto){Iterator<E>e=iterator();if(o==null){while(e.hasNext())if(e.next()==null)returntrue;}else{while(e.hasNext())if(o.equals(e.next()))returntrue;}returnfalse;}//...}
resumindo... tentar usar contains(Object o) ... sem implementar Object.equals ... vai fazer com que a coleção teste via hashCode() ... o que só retornará verdade caso os 2 objetos compartilhem uma única referencia na memoria ...
K
keltonribeiro
Então seria melhor eu usar o Interator pra essa pesquisa ?
Lavieri
seria melhor vc implementar o equals no seu objeto ^^ … é bem + simples… caso contrario… sempre que vc for usar contains, vai ter que se lembrar de fazer um procedimento que já esta escrito dentro da propria collection… basta implementar o equal no seu objeto
K
keltonribeiro
Então ficaria dessa forma :
for(activeDirectoryDTOobjLDAP:listaNomesLdap){nomeLdap=objLDAP.getNomeUsuario().trim();System.out.println("Valor vindo do servidor Ldap -->"+nomeLdap);if(retornaNomesBanco.equals(objLDAP.getNomeUsuario().trim())){System.out.println("Este nome já contém no banco de dados -->"+objLDAP.getNomeUsuario().trim());}else{novoNome.setNomeUsuario(nomeLdap);armazenaNomes.add(novoNome);System.out.println(" === > Novo nome incluído na collection -->"+nomeLdap);}}
K
keltonribeiro
No meu debug aqui, eu vejo realmente que o objeto (um ArrayList,) tenta comparar uma string de valor (Nome) … mesmo usando o equals …
Lavieri
na verdade o ideal é assim... o que vc quer comprar ??? .... activeDirectoryDTO (estranho uma classe com letra minuscula no inicio mas tudo bem...)
vc quer fazer compração do tipo...
activeDirectoryDTO.equals(String s); onde a string é o nome do usuario... então seria assim
no equal vc coloca a condição e que objetos activeDirectoryDTO serão iguais se o nomeUsuario forem iguais, o resto ele faz só, jah que ele vai chamar o metodo equals do seu objeto, ou seja, o que vc acabou de implementar.
Não se esqueça de instanciar o retornaNomesBanco.
K
keltonribeiro
Paulo, agora entendi … só que tem mais uma pergunta :
Posso comparar um objeto do tipo ArrayList com outro objeto Collection ?
veja esta parte que atribuo uma collection para receber um arraylist
try{sql.delete(0,sql.length());sql.append("SELECT * FROM ad_usuarios");ps=conexao.prepareStatement(sql.toString());ResultSetrs=ps.executeQuery();retornaNomesBanco=newArrayList<activeDirectoryDTO>();armazenaNomes=newArrayList<activeDirectoryDTO>();while(rs.next()){activeDirectoryDTOlistaNomesBanco=newactiveDirectoryDTO();listaNomesBanco.setNomeUsuario(rs.getString("nome"));retornaNomesBanco.add(listaNomesBanco);System.out.println(" Nome vindo do bando de dados --> "+listaNomesBanco);}listaNomesLdap=adUsuario.ImprimeUsuarios();activeDirectoryDTOnovoNome=newactiveDirectoryDTO();for(activeDirectoryDTOobjLDAP:listaNomesLdap){nomeLdap=objLDAP.getNomeUsuario().trim();System.out.println("Valor vindo do servidor Ldap -->"+nomeLdap);if(retornaNomesBanco.equals(objLDAP)){System.out.println("Este nome já contém no banco de dados -->"+objLDAP.getNomeUsuario().trim());}else{novoNome.setNomeUsuario(nomeLdap);armazenaNomes.add(novoNome);System.out.println(" === > Novo nome incluído na collection -->"+nomeLdap);}}
P
Paulo_Aguiar
ArrayList implementa a interface List, que por sua vez implementa a interface Collection, então como ele vai tah trabalhando com os objetos do tipo Collection, não vejo problemas, ma seria bom vc colocar no teu equals algo do tipo:
if(objinstanceofactiveDirectoryDTO){
returntrue;
assim ele compararia só com objetos do tipo activeDirectoryDTO
M
marcobiscaro2112
Paulo Aguiar:
ArrayList implementa a interface List, que por sua vez implementa a interface Collection, então como ele vai tah trabalhando com os objetos do tipo Collection, não vejo problemas, ma seria bom vc colocar no teu equals algo do tipo:
if(objinstanceofactiveDirectoryDTO){
returntrue;
assim ele compararia só com objetos do tipo activeDirectoryDTO
Apenas um detalhe: você quis dizer a coisa certa, mas disse do jeito errado: uma interface sempre ESTENDE outra(s) e nunca as implementa. Apenas uma classe pode implementar interfaces. Portanto, entenda-se o seguinte:
ArrayList implementa a interface List, que por sua vez estende a interface Collection…
P
Paulo_Aguiar
Foi só pra ver se tinha alguem prestando atenção, risos
K
keltonribeiro
Obrigado a todos que me ajudaram neste código …
Foram muito cordiais e companheiros … muito obrigado mesmo !!!
Tive que abandonar a collection e usar um arraylist de strings … e deu certo !!!