Non è necessario Guava di fare questo:
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);
}
}
Detto questo, si potrebbe utilizzare un Guava Table
invece di un Map
e di evitare la necessità di creare il Name
... utilizzare il nome come la riga chiavi e cognome come tasti di colonna, per esempio.
Un'altra scelta potrebbe essere quella di utilizzare Multimaps.index
per indicizzare tutte le persone nell'elenco per nome. Quindi per ogni elenco di persone associate a un nome particolare, la prima persona sarebbe la prima persona con quel nome dall'elenco e le altre sarebbero duplicate.
Puoi chiarire cosa si intende "identificare l'oggetto è è il duplicato di "- presumo tu intendi che il primo elemento è l'elemento" reale "e gli elementi successivi sono duplicati? –