Nie trzeba Guava to zrobić:
List<Person> people = ...
Map<Name, Person> peopleByName = new HashMap<>();
for (Person person : people) {
// Name is a simple value class with equality based on its fields
Name name = new Name(person.getFirstName(), person.getLastName());
Person firstPersonWithName = peopleByName.get(name);
if (firstPersonWithName == null) {
peopleByName.put(name, person);
} else {
// or whatever you do to mark a duplicate
person.setDuplicateOf(firstPersonWithName);
}
}
Powiedział, że można użyć Guava Table
zamiast Map
i uniknąć konieczności tworzenia Name
... używać imienia jako rzędzie klucze i nazwisko jako klawisze kolumnowe, powiedz.
Innym wyborem byłoby użycie Multimaps.index
do zindeksowania wszystkich osób na liście według nazwy. Następnie dla każdej listy osób zmapowanych na konkretną nazwę pierwsza osoba byłaby pierwszą osobą o tej nazwie z listy, a pozostałe byłyby duplikatami.
Czy możesz wyjaśnić, co masz na myśli „identyfikacji obiektu to jest duplikatem "- zakładam, że masz na myśli, że pierwszy element to" prawdziwy "przedmiot, a kolejne elementy są duplikatami? –