2016-11-16 102 views
0

我有一個變量品牌,類型和日期pojo,我創建了一個使用這個pojo的Arraylist。這ArrayList是重複的,現在我想通過僅比較該對象的品牌和類型來刪除arraylist中的重複。如果品牌和類型已經存在,我需要從arraylist中刪除該對象。如何比較java中arraylist對象的兩個變量

+0

你可以有一個代碼片段或代碼示例? – msagala25

+0

覆蓋equals()&hahscode()並使用list1.removeAll(list2) – developer

+0

如果具有相同的品牌和類型(不看日期),執行'equals()'聲明兩個對象相等。結果,'hashCode()'也不應該看日期。 –

回答

0

覆蓋equals()& hahscode(根據您的變量添加類),然後使用LinkedHashSet,而不是ArrayList的和所有的工作都將自動完成。

+0

它的工作表示感謝 –

0

如果您無法或不願意更改POJO的equals()方法,則必須使用Map來爲每個不同的品牌+類型對收集一個樣本。

下面是一個例子代碼段此使用流,其作用:

list = new ArrayList(list.stream().unordered() 
      .collect(Collectors.toMap(
        pojo -> new Pair<>(pojo.brand, pojo.type), 
        pojo -> pojo, 
        (original, duplicate) -> original)).values()); 

或者,也可以包裝在一個包裝對象定義僅基於品牌和類型equals每個POJO,然後用簡單的distinct()流過濾器,最後解開每個結果。