2016-12-10 6 views
-1

ListでJavaのベストプラクティスは何ですか? ここに私の問題があります:重複キーを削除して最新のもののみを保存する

実際には2つのオブジェクトがあります:DataPointオブジェクトとCollectorオブジェクトです。

コレクタには、List<DataPoint>リスト属性があります。 リストされたこのDataPointオブジェクトは、3つの値によって定義されます。 タイプ、値、および単位。

私の目標は、DataPointリストの重複したTYPE要素を削除し、最後のものだけを保存するコレクターのメソッドを作成することです。 この方法の最後に、私のリストは異なるタイプのDataPointのみを得ることができます。いいえ2.

これを行うにはどうすればよいですか?私はJava初心者です!

+1

郵便コード内でequalshashcodeの適切な実施を持っていることを確認し、我々はそれにcomemtます。 – usr2564301

+2

'Map 'が必要です。 –

答えて

0

DataPointクラス の適切hashCodeequalsメソッドを実装し、リストからのみ、一意の値を格納するjava.util.Set実装を使用しています。

Set<DataPoint> set = new HashSet<DataPoint>; 
set.addAll(list); 
+1

これは、一意の 'Type'の' DataPoint'を確実に保持しますが、必ずしも** last **のものである必要はありません。 – Mureinik

0

あなたは、その端からリストを反復処理する独自のタイプ(例えば、Setを使用)を保存し、インクルードがすでに遭遇した型を持つ任意のポイントを削除することができます。例えば。 (データメンバがpointsと呼ばれていると仮定した場合):

public void retainUniqueTypes() { 
    Set<Type> types = new HashSet<>(); 
    while (iter.hasPrevious()) { 
     DataPoint current = iter.previous(); 
     if (!types.add(current.getType())) { 
      iter.remove(); 
     } 
    } 
} 
0

これを処理するための最良の方法です。 List<DataPoint>Set<DataPoint>に変更してください。理由はSetに重複がないためです。
はまた、あなたがDataPoint

+0

これを行うにはOPが期待していることを実行するには、 'equals'と' hashCode'のfnukyの実装が必要です。それでも、これにより、DataPointを一意のTypeに保つことができますが、必ずしも** last **である必要はありません。 – Mureinik

関連する問題