找到 2 个数组列表之间的交集的有效算法/方法是什么。 (我正在使用 java 8 )

What is the efficient algorithm / way to find intersection between 2 array lists. ( I am using java 8 )

我有 2 个数组列表,其中包含一个自定义对象 Stock。

public class Stock{

    private String companyName;
    private double stockPrice;

    // getters and setters 
}

List1 包含 Stock 对象。 List2 还包含库存对象。

列表 1 和列表 2 的大小相同。列表 1 中有一些库存对象与列表 2 中存在的对象相同。我需要从列表 2 中获取列表 1 中存在的那些相同对象。换句话说,获取列表中列表 1 和列表 2 的交集2. 我试图找出 Java 8 中是否有任何直接的方法以有效的方式给出这个结果。或者如果没有,如何在时间复杂度和 [=19= 方面构建一个有效的算法] 复杂性?非常感谢您的帮助。

List<T> intersect = list1.stream()
    .filter(list2::contains)
    .collect(Collectors.toList());

信用:Fat_FS 在 Intersection and union of ArrayLists in Java 回答。

确保重写 equals 和 hashcode 方法(假设您想查看对象的内容以进行相等比较)

转换列表以设置以获得更好的性能