【问题标题】:Find intersection in multiple lists在多个列表中查找交集
【发布时间】:2020-07-08 07:15:19
【问题描述】:

抱歉,如果之前有人问过这个问题,但我找不到任何与我的问题相似的东西。 所以我拥有的是一个包含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());
}

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

【问题讨论】:

  • 您能否进一步澄清一下,MyClass 中所有值的交集是什么意思
  • 我需要遍历所有“投注”列表并找到值的交集。希望这是有道理的:)

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


【解决方案1】:

您可以为此使用reduce

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

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

【讨论】:

  • 太棒了,这正是我想要的!非常感谢!
  • @Igor 我真的很高兴能帮上忙!祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 2022-06-15
  • 2010-10-13
  • 2013-10-12
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多