Java中的集合
Java LinkedList指南
Java ArrayList指南
Java中不可變的ArrayList
CopyOnWriteArrayList指南
JavaJava中的多維ArrayList
將迭代器轉換為列表
Java –從列表中獲取隨機項目/元素
用Java對列表進行分區
從Java列表中刪除所有Null
從Java中的列表中刪除所有重複項
檢查Java中兩個列表是否相等
如何使用Java在列表中查找元素
Java列表UnsupportedOperationException
將列表複製到Java中的另一個列表
從列表中刪除所有出現的特定值
將多個元素添加到Java ArrayList
從列表中刪除第一個元素
在Java中迭代列表的方法
Java中兩個列表的交集
如何計算Arraylist中的重複元素
查找Java中兩個列表之間的差異
Java中兩個列表的交集
1.概述
在本教程中,我們將學習如何檢索兩個List
的交集。
像許多其他事情一樣,這要歸功於Java 8中流的引入。
2.兩個字符串列表的交集
讓我們創建兩個具有一些交集的String
的List
,它們都具有一些重複的元素:
List<String> list = Arrays.asList("red", "blue", "blue", "green", "red");
List<String> otherList = Arrays.asList("red", "green", "green", "yellow");
現在,我們將藉助流方法確定列表的交集:
Set<String> result = list.stream()
.distinct()
.filter(otherList::contains)
.collect(Collectors.toSet());
Set<String> commonElements = new HashSet(Arrays.asList("red", "green"));
Assert.assertEquals(commonElements, result);
首先,我們使用distinct
刪除重複的元素。然後,我們使用filter
選擇在otherList
中也包含的otherList
。
最後,我們使用Collector
轉換輸出。相交處應僅包含每個公共元素一次。順序無關緊要,因此toSet
是最直接的選擇,但是我們也可以使用toList
或其他收集器方法。
有關更多詳細信息,請查看我們的Java 8收集器指南。
3.自定義類列表的交集
如果我們的List
不包含String
而是我們創建的自定義類的實例怎麼辦?好吧,只要我們遵循Java的約定,使用流方法的解決方案就可以很好地用於我們的自定義類。
contains
方法如何確定特定對像是否出現在列表中?基於equals
方法。因此,我們必須重寫equals
方法,並確保它根據相關屬性的值比較兩個對象。
例如,兩個矩形的寬度和高度相等。
如果不重寫equals
方法,則我們的類將使用父類的equals
實現。在一天的結束,或者更確切地說,在繼承鏈的最後,執行Object
類的equals
方法。然後,只有兩個實例引用堆上的完全相同的對象時,它們才相等。
有關equals
方法的更多信息,請參見關於Java equals()
和hashCode()
合約的文章。
4。結論
在這篇快速文章中,我們已經看到瞭如何使用流來計算兩個列表的交集。如果我們了解Java Stream API的方式,那麼還有許多其他的操作曾經很繁瑣但很簡單。在這裡查看我們有關Java流的更多教程。
可以在GitHub上找到代碼示例。