繁体   English   中英

Scala-如何根据Future过滤Seq

[英]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外部的Futurefilter内部的List

编辑:添加了用于traverse typesignature的doc链接,虽然有点吓人。

编辑2:使此答案完整。 这里是一个完整的例子https://scalafiddle.io/sf/p84FSFv/0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM