如何基于 Future[Boolean] 而不是 Boolean 创建 Enumeratee 过滤器
How to create an Enumeratee filter based on a Future[Boolean] instead of a Boolean
在我的 Play 应用程序中,我正在使用过滤器函数创建一个 Enumeratee:
val activeTeams = Enumeratee.filter[Team](teamIsActive)
我的问题是我的 teamIsActive
函数 returns 一个 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
一起使用
我认为这是不可能的。您无法在谓词函数内解决未来问题。相反,您应该先获取团队规模,然后使用团队规模列表创建谓词函数。
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))
}
这也减少了对存储库的查询次数。另一方面,它可以增加从您的存储库中获取的数据数量。但是我不知道你的数据结构。
在我的 Play 应用程序中,我正在使用过滤器函数创建一个 Enumeratee:
val activeTeams = Enumeratee.filter[Team](teamIsActive)
我的问题是我的 teamIsActive
函数 returns 一个 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
我认为这是不可能的。您无法在谓词函数内解决未来问题。相反,您应该先获取团队规模,然后使用团队规模列表创建谓词函数。
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))
}
这也减少了对存储库的查询次数。另一方面,它可以增加从您的存储库中获取的数据数量。但是我不知道你的数据结构。