java - 如何从子集合中收集过滤对象列表
问题描述
让我们有数据结构,如下所述。
Class LandResearch {
Research research;
}
Class Research {
List<Bonus> bonuses;
}
Class Bonus {
BonusType bonusType;
double bonusValue;
}
我的情况是,当我有一个List<LandResearch>
并且我有特定的BonusType
. 我想收集所有的奖金,这给了BonusType
。
用循环来做这件事不是问题,但我想用流来管理它。
现有的解决方案,我想替换它。
List<Bonus> bonuses = new ArrayList<>();
for (LandResearch landResearch: landResearches) {
for (Bonus bonus: landResearch.getResearch().getBonuses()){
if (bonus.getBonusType().equals(searchedBonusType)){
bonuses.add(bonus);
}
}
}
感谢您的帮助和提示。
解决方案
用于flatMap
生成Stream
所有Bonus
实例中的 a ,然后过滤并收集到 a List
:
List<Bonus> bonuses =
landResearches.stream() // Stream<LandResearch>
.flatMap(l->l.getResearch().getBonuses().stream()) // Stream<Bonus>
.filter(b->b.getBonusType().equals(searchedBonusType)) // Stream<Bonus>
.collect(Collectors.toList()); // List<Bonus>
推荐阅读
- r - R闪亮的应用程序仅显示浏览器中的半页
- typescript - 如何在“或”运算符定义中获取特定类型?
- java - 无法通过线程池创建更多线程来处理套接字(块 IO)
- ios - 与屏幕锁定动画的任何交互
- javascript - 如何解析 JavaScript 中 JSON 字符串数组的前 n 行?
- firebase - Firestore 空结果算作已读?
- c++ - 我可以在不知道 C 的情况下在 lua 中使用 CSound 吗?
- python - 多列交叉表
- python - django 频道配置不当:在 ASGI_APPLICATION 模块中找不到“应用程序”
- python - 我在 python 中使用 PhotoImage 制作图像,但找不到图像