2016-11-26 8 views
-2

私はBeanのリストを持っていますが、BeanのIDに基づいて重複を削除する方法 コードワイズで削除する方法を教えてください。Javaを使用してBeanからIDに基づいて重複を削除するには?

List<Tasks>task = 

[ 
    { 
    "title": "Title1", 
    "description": "Description1", 
    "id": "123456" 

    }, 
    { 
    "title": "Title2", 
    "description": "Description2", 
    "id": "123456" 

    }, 
    { 
    "title": "Title3", 
    "description": "Description3", 
    "id": "123456" 

    }, 
    { 
    "title": "Title4", 
    "description": "Description4", 
    "id": "654321" 

    } 
] 

私の予想出力は、IDからのリストのいずれか= 123456と654321

[ 

    { 
    "title": "Title2", 
    "description": "Description2", 
    "id": "123456" 

    }, 
    { 
    "title": "Title4", 
    "description": "Description4", 
    "id": "654321" 

    } 
] 
+2

ここで、キーはIDです。次に、マップの値を取得します。 –

+0

http://stackoverflow.com/questions/14491408/sort-and-dedupe-java-collectionsを参照してください –

答えて

1
Map<String, Task> map = new HashMap<>(): 
tasks.forEach(t -> map.put(t.getId(), t); 
Collection<Task> withoutDuplicates = map.values(); 
+0

私はあなたの答えを試みましたが、タイプコレクションにエラーが表示されます。コレクションは一般的ではありません。引数でパラメータ化することはできません

+0

これはタイプミスです。タイプはコレクションであり、コレクションではありません。しかし、あなたは本当にこれらの3行のコードを理解する必要があります。コピーして貼り付けないでください。 Mapのjavadoc、Map.values()、およびMap.put()を読んで理解してください。 –

+0

リストとして返す方法は、Colllectionオブジェクトのconatinsを使わないでこのデータをリストに変換する方法を複写する

-2

あなたが追加することができますが、Beanクラスにメソッドに等しいです。

@Override 
    public boolean equals(Object obj) { 
     if(id.equals((YourBeanClass)obj).id) 
      return true; 
     return false; 
    } 

ここで、idはBeanオブジェクトIDです。 を保存すると、重複を避けることができますArrayListを使用している場合は、containsメソッドを使用して追加する前にBeanオブジェクトがすでに存在するかどうかを確認できます。

+0

は、コードで賢明な重複を削除する可能性があります。 –

+0

いいえ、私はあなたがオーバーライドequals()すべての構造体としての機能内部的にequals関数を使用してObjectを比較します。もう1行のコードを使用することができます。LinkedHashSet tasklist = new LinkedHashSet(yourtasklist); – Swapnil

+0

再度、http://stackoverflow.com/questions/14491408/sort-and-dedupe-java-collectionsを参照してください。受け入れられた答えは、クラスを書き直すことなくカスタムコンパレータを使用して重複を除去する方法を示しています。 –

関連する問題