让我们有数据结构,如下所述。
Class LandResearch {
Research research;
}
Class Research {
List<Bonus> bonuses;
}
Class Bonus {
BonusType bonusType;
double bonusValue;
}
我的情况是,当我有一个 List<LandResearch>
我有具体的 BonusType
.
我想收集所有的奖金,这给了BonusType
.
用 for cycles 做这不是问题,但我想用流来管理它。
我想替换的现有解决方案。
List<Bonus> bonuses = new ArrayList<>();
for (LandResearch landResearch: landResearches) {
for (Bonus bonus: landResearch.getResearch().getBonuses()){
if (bonus.getBonusType().equals(searchedBonusType)){
bonuses.add(bonus);
}
}
}
感谢您的帮助和提示。
最佳答案
使用 flatMap
生成所有 Bonus
实例的 Stream
,然后过滤并收集到 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>
关于java - 如何从子集合中收集过滤对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51854357/