[英]Scala - how to filter Seq base on Future
我有一个简单的方法,如果有任何事件,它应该过滤所有人。 因此,如果“ Person
没有任何事件,则应将其从列表中删除。 最后返回过滤列表。
def filterPersonsWithEvents(persons: Seq[Person]): Seq[Person] = {
persons.filter(sport => {
eventRepo.find(person.name) != null
})
persons
}
问题是从eventRepo
返回Future [Event]的方法中find
。 而且这种方法不能很好地过滤persons
。 我应该如何更改以获得正确的结果? 我是Scala的新手,所以也许我不知道某些“技巧”
EDITED
现在我的代码如下:
def filterPersonsWithEvents(persons: Seq[Person]): Seq[Person] = {
Future.traverse(persons)(person => {
eventRepo.find(person.name).map(e => person-> e)
}).map(_.filter(_._2 != null).map(_._1))
}
解决方案再次traverse
。 遍历让我们采用List[X]
和X => Future[Y]
并给您Future[List[Y]]
以便它“翻转”包含的类型。 那么您可以map
外部的Future
并filter
内部的List
。
编辑:添加了用于traverse
typesignature的doc链接,虽然有点吓人。
编辑2:使此答案完整。 这里是一个完整的例子https://scalafiddle.io/sf/p84FSFv/0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.