让我们拥有数据结构,如下所述。
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
,然后过滤并收集为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>