サブコレクションからfilterredオブジェクトのリストを収集する方法

カート:

レッツは、以下に記載されたデータ構造を、持っています。

Class LandResearch {
    Research research;
}

Class Research {
    List<Bonus> bonuses;
}

Class Bonus {
    BonusType bonusType;
    double bonusValue;
}

私が持っている状況でI'am、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>

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=184589&siteId=1