Existe alguma forma mais inteligente de procurar elementos repetidos em uma lista?
Eu tenho uma tabela com 1500 registros e quero saber quantas e quais delas tem algumas colunas em comum. Inicialmente pensei em pegar 1ª linha e comparar com todas, pegar a 2ª e comparar outra vez…
Mas isso daria 1500! (um número absurdo), alguém aí conhece outra forma de fazer?
não que isso va resolver a sua vida mais reduz o processamento creio eu que a quase a metade…
ao comparar com as uotras colunas, vc não precisa comparar com as anteriores… exemplo:
quando tiver comparando a coluna 2, vc não precisa compara-la com a 1 pois quando comparava a 1 com as outras ja tinha comparado a 1 com a 2…
quando comparar a 3, vc ja vai ter comparado 1 x 3 e 2 x 3, não vai precisar comparar 3x1 e 3x2…
como disse não vai resolver sua vida mais… ajuda…rsrs
aliais eu acho também que nao vai ter outra forma, caso deixe de fazer alguma comparação vai estar imcompleto…
LPJava
Sim use uma das classes de Set que vc acaba removendos os repetidos… de acordo com o equals e o hashcode do objeto.
T
thingol
Uma maneira muito simples é ordenar a tabela pelas colunas que você quer checar. Digamos que você tenha uma lista de clientes e quer ver quantos “João da Silva” você tem nela. Ordene a tabela por nome e sobrenome, e percorra-a comparando o registro atual e o registro anterior.
ViniGodoy
Isso, você pode fazer usando dois sets.
Se você já sobrescreveu o equals e o hashcode, use um HashSet. Se suas classes são comparáveis (implementam Comparable ou você pode escrever um Comparator para ela), use um TreeSet.
Abaixo um exemplo:
publicclassRepeteco{publicstaticvoidmain(String[]args){List<String>umaLista=newArrayList<String>();umaLista.add("ViniGodoy");umaLista.add("LPJava");umaLista.add("maior_abandonado");umaLista.add("EugenioMonteiro");umaLista.add("Scott Meyers");umaLista.add("Joana D'arc");umaLista.add("ViniGodoy");umaLista.add("Bill Gates");umaLista.add("maior_abandonado");umaLista.add("Julio Iglesias");umaLista.add("Don Juan de Marco");umaLista.add("Lima Duarte");umaLista.add("Arnaldo Antunes");umaLista.add("EugenioMonteiro");umaLista.add("Chuck Norris");umaLista.add("LPJava");Set<String>semRepeteco=newTreeSet<String>();Set<String>repetidas=newTreeSet<String>();Set<String>soSemRepeteco=newTreeSet<String>();for(Stringstr:umaLista){soSemRepeteco.add(str);if(!semRepeteco.add(str)){repetidas.add(str);soSemRepeteco.remove(str);}}System.out.println("A mesma lista, sem repetições: "+semRepeteco);System.out.println("Lista só com palavras que se repetem: "+repetidas);System.out.println("Lista só com palavras que não se repetem: "+soSemRepeteco);}}