2016-11-26 61 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

填充一個Map ,其中的鍵是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

這是一個錯字。類型是集合,而不是集合。但你真的需要了解這三行代碼。不要複製並粘貼它們。閱讀Map的javadoc,Map.values()和Map.put()以瞭解。 –

+0

如何返回列表意味着Colllection對象conatins withoutDuplicates該數據如何轉換爲列表

-2

您可以添加equals方法在bean類。

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

其中id是Bean對象Id。 並用於存儲ArrayList數據使用LinkedHashSet這將避免重複。或者如果您使用ArrayList您可以使用包含方法來檢查Bean對象是否已添加前已存在。

+0

是否可以在代碼明智的情況下刪除重複項,而不需要bean類中的任何修改 –

+0

不,我想你需要覆蓋equals()函數作爲所有結構在內部使用equals函數來比較對象。你可以使用一行代碼LinkedHashSet tasklist = new LinkedHashSet(yourtasklist); – Swapnil

+0

再次參見http://stackoverflow.com/questions/14491408/sort-and-dedupe-java-collections接受的答案顯示如何使用自定義比較器進行重複數據刪除,而無需重新編寫類。 –