在我的Play应用程序中,我使用过滤功能创建了一个Enumeratee:
val activeTeams = Enumeratee.filter[Team](teamIsActive)
我的问题是我的teamIsActive
函数返回Team => Future[Boolean]
而Enumeratee.filter
方法将Team => Boolean
作为参数:
def teamIsActive: (Team) => Future[Boolean] = {
team: Team =>
val teamSize = Future[Int] = teamRepository.membersOf(team).map {
members => members.size
}
teamSize.map(_ > 0)
}
那么,我如何将Future[Boolean]
与Enumeratee
答案 0 :(得分:1)
我认为这是不可能的。您无法解决谓词函数中的未来。相反,您应首先获取团队规模,然后使用团队规模列表创建谓词函数。
val teamSizes: Future[Map[Team, Int]] = teamRepository.sizes()
def teamIsActive(sizes: Map[Team, Int]): (Team) => Boolean = { team: Team =>
sizes.getOrElse(team, 0) > 0
}
teamSizes.map { sizes =>
val activeTeams = Enumeratee.filter[Team](teamIsActive(sizes))
}
这也减少了对存储库的查询数量。另一方面,它可以增加从存储库中提取的数据的数量。但我不知道你的数据结构。