Bạn không cần ổi để làm điều này:
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);
}
}
Điều đó nói rằng, bạn có thể sử dụng một Ổi Table
thay vì một Map
và tránh cần để tạo ra các Name
... sử dụng tên đầu tiên như hàng chìa khóa và họ là chìa khóa cột.
Một lựa chọn khác là sử dụng Multimaps.index
để lập chỉ mục tất cả những người trong danh sách của bạn theo tên. Sau đó, đối với mỗi danh sách những người được ánh xạ tới một tên cụ thể, người đầu tiên sẽ là người đầu tiên có tên đó từ danh sách của bạn và những người khác sẽ trùng lặp.
Bạn có thể làm rõ những gì bạn có nghĩa là "xác định các đối tượng nó là bản sao của "- Tôi đoán bạn có nghĩa là mục đầu tiên là mục" thực ", và các mục tiếp theo là bản sao? –