让我们具有数据结构,如下所述。
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);
}
}
}
感谢您的帮助和提示。
答案 0 :(得分:8)
使用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>
答案 1 :(得分:0)
如果您选择kotlin
private fun Collection<LandResearch>.bonuses(wanted: BonusType): List<Bonus> =
flatMap { it.research.bonuses }.filter { it.bonusType == wanted }
像这样使用它:
val bonusesOfWantedType = listOfLandSearches.bonuses(wantedBonusType)