Se si vuole trovare duplicati, e non solo la loro rimozione, un approccio sarebbe quello di lanciare la collezione in un array, ordinare l'array tramite un comparatore che implementa i criteri di, quindi linearmente a piedi attraverso l'array, guardando per duplicati adiacenti.
Ecco uno schizzo (non testato):
MyComparator myComparator = new MyComparator();
MyType[] myArray = myList.toArray();
Arrays.sort(myArray, myComparator);
for (int i = 1; i < myArray.length; ++i) {
if (0 == myComparator.compare(myArray[i - 1], myArray[i])) {
// Found a duplicate!
}
}
Edit: Dal tuo commento, si vuole solo sapere se ci sono duplicati. L'approccio sopra funziona anche per questo. Ma potresti semplicemente creare un java.util.SortedSet con un comparatore personalizzato. Ecco uno schizzo:
MyComparator myComparator = new MyComparator();
TreeSet treeSet = new TreeSet(myComparator);
treeSet.addAll(myCollection);
boolean containsDuplicates = (treeSet.size() != myCollection.size());
fonte
2012-05-25 14:08:59
In che modo si desidera specificare i criteri di deduplicazione? Come un predicato binario? – NPE
Vuoi * trovare * i duplicati o * rimuoverli *? –
@ AndyThomas-Cramer In realtà sarebbe sufficiente solo sapere se ci sono duplicati. –