Java 如何从子集合中收集筛选对象列表

Java 如何从子集合中收集筛选对象列表,java,java-8,java-stream,Java,Java 8,Java Stream,让我们来看看下面描述的数据结构 Class LandResearch { Research research; } Class Research { List<Bonus> bonuses; } Class Bonus { BonusType bonusType; double bonusValue; } 感谢您的帮助和提示。使用flatMap生成所有奖金实例的流,然后过滤并收集到列表: List<Bonus> bonuses =

让我们来看看下面描述的数据结构

Class LandResearch {
    Research research;
}

Class Research {
    List<Bonus> bonuses;
}

Class Bonus {
    BonusType bonusType;
    double bonusValue;
}

感谢您的帮助和提示。

使用
flatMap
生成所有
奖金
实例的
,然后过滤并收集到
列表

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>
列出奖金=
landResearches.stream()//stream
.flatMap(l->l.getResearch().GetBonus().stream())//流
.filter(b->b.GetBonuType().equals(SearchedBonuType))//流
.collect(Collectors.toList());//列表
如果您可以选择

private fun Collection<LandResearch>.bonuses(wanted: BonusType): List<Bonus> =
        flatMap { it.research.bonuses }.filter { it.bonusType == wanted }
private fun Collection<LandResearch>.bonuses(wanted: BonusType): List<Bonus> =
        flatMap { it.research.bonuses }.filter { it.bonusType == wanted }
val bonusesOfWantedType = listOfLandSearches.bonuses(wantedBonusType)