让我们拥有数据结构,如下所述。

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>

07-27 18:45