コレクションで重複を見つける

コレクション内の重複したオブジェクトを見つけてマークする最良の方法は何ですか?リストの人がいるとし、重複戦略は名と姓の完全一致に基づいているとしましょう。

  1. すべての重複を特定する
  2. 重複している人物が重複していることを示すマークを付けてください
  3. 各重複する人物について、それが重複しているオブジェクトを特定する

グアバでこれを行う簡単な方法はありますか?

ベストアンサー

これを行うにはGuavaは必要ありません。

List people = ...
Map 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);
  }
}

つまり、 Map の代わりにGuava Table を使用し、
Name を作成する必要がなくなります。キーと姓の列キーとして、例えば言う。

もう一つの選択肢は、 Multimaps.index
を使用して、リスト内のすべての人物を名前で索引付けすることです。その後、特定の名前にマッピングされた人のリストごとに、最初の人物がリストの名前を持つ最初の人物になり、他の人物は重複したものになります。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です