在多个列表中查找交集

时间:2020-03-27 14:19:43

标签: java arrays list functional-programming java-stream

很抱歉,如果以前有人问过我,但是我找不到与我的问题相似的东西。 因此,我所拥有的是一个包含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列表上找到交点。

1 个答案:

答案 0 :(得分:3)

您可以使用reduce

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

reduce操作获取两个连续的列表,并产生一个中间元素和两个原始列表中的元素。