java - 在多个列表中查找交集
问题描述
抱歉,如果之前有人问过这个问题,但我找不到任何与我的问题相似的东西。所以我拥有的是一个包含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
。
解决方案
您可以reduce
为此使用:
myClassList.stream()
.map(MyClass::getBets)
.reduce((l1, l2) -> l1.stream()
.filter(l2::contains)
.collect(Collectors.toList()))
.orElse(new ArrayList<Long>());
该reduce
操作采用两个连续的列表并生成一个中间列表,其中包含两个原始列表中的元素。
推荐阅读
- flutter - 如何使用自定义小部件绘制一条线并在用户点击线颤动时更改角度
- python - 与将 timedelta 添加到 UTC 日期相比,Python astimezone 比预期结果晚 1 小时
- reactjs - 将状态从其他组件更新到主组件
- jupyter-notebook - 有没有办法在 jupyter markdown 中输入 $\newcommand$ 以正确导出到 LaTeX?
- c# - 我是否需要为每个 redis 实例建立一个新连接?
- python - Python - 检查 URL 返回
- javascript - 无法将数组添加到本地存储
- python - Django - 测试登录视图 - AttributeError:'HttpRequest'对象没有属性'user'
- c - 当位被屏蔽时使用不正确的格式说明符是未定义的行为吗
- android - 使用 adb 命令完整的 android 逻辑副本