首页 > 解决方案 > 在多个列表中查找交集

问题描述

抱歉,如果之前有人问过这个问题,但我找不到任何与我的问题相似的东西。所以我拥有的是一个包含ArrayList值的对象列表。

例如:

public class MyClass {
    List<Long> bets = new ArrayList<>();
    ....
}

List<MyClass> myClassList = currencyMap.get(currencyCode);

我一直在尝试一些事情,但我相信我的解决方案有些不妥:

for (int i = 0; i < myClassList.size(); i++) {
    if (i + 1 >= myClassList .size()) {
        break;
    }
    myClassList.get(i).getBets().retainAll(myClassList.get(i + 1).getBets());
}

所以我现在想做的是bets在列表中的所有列表上找到交集MyClass

标签: javaarrayslistfunctional-programmingjava-stream

解决方案


您可以reduce为此使用:

myClassList.stream()
    .map(MyClass::getBets)
    .reduce((l1, l2) -> l1.stream()
        .filter(l2::contains)
        .collect(Collectors.toList()))
    .orElse(new ArrayList<Long>());

reduce操作采用两个连续的列表并生成一个中间列表,其中包含两个原始列表中的元素。


推荐阅读