2017-10-09 11 views
1

オブジェクトの特定のフィールドが一意かどうかを確認する必要があるオブジェクトのリストがあります。特定のオブジェクトプロパティがリスト内で一意であるかどうかをチェック

public class SomeBean { 

    private String name; 
    private String value; 

} 

List<SomeBean> beans = ... 

だから私はすべてのvalueフィールドとすべてのnameフィールドが(すべての値がユニークであり、すべての名前が一意である)独立して一意であるかどうかを確認する必要があります。 明白な解決策は、List<String> names ...List<String> valuesのリストを取得し、別個に確認することですが、私の場合はこのリストがかなり大きくなる可能性があります。そして、このリストは外部から来ているので、初期のデータ構造を変更することはできませんでした。

これは最も効率的な方法はですか?

ありがとうございました。

+2

フィールドは個別に一意であるか、またはその組み合わせは一意ですか。 – Yash

+0

独立して。質問 –

+0

を更新しました。私の意見では、それを確認するためにHashTableを使用する必要があります。 O(n^2) – Yash

答えて

1

一つはTreeSetコレクションを使用することです。重複する項目を防ぐためにcompareTo()メソッドをオーバーライドする必要があります

0

重複したアイテムを削除する最も簡単な方法は、重複した値が許可されていないため、アイテムをSetに読み込むことです。 HashSetを使用できます。

OR

あなたがキーとしてgetName() + getValue()を使用することができますwherあなたはHashMap<String, SomeBean>にアイテムを追加することができます。可能な方法の

HashMap<String, SomeBean> myMap= new HashMap<>(); 
myMap.put(someBean.getName() + someBean.getValue(), bean); 
... 
+0

私はあなたのbeanのequals()とhashCode()をオーバーライドする必要があります_それよりも簡単です。 –

+0

このタスクを完了できるようにするには、DTOの 'equals'と' hashCode'をオーバーライドしません。しかし、私はカスタムコンパレータでTreeSetを作成できると思います。 –

関連する問題