加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

映射列表的Scala未来

发布时间:2020-12-16 09:06:29 所属栏目:安全 来源:网络整理
导读:我有一份期货清单,我想逐一改造: def foo(x: A): Future[B] = {...}def mapFutures(xs: Future[List[A]]): Future[List[B]] 函数mapFutures应该使用foo转换列表的每个元素,并返回列表的未来.最好的方法是什么? 解决方法 你应该能够做你想做的事情(注意我将
我有一份期货清单,我想逐一改造:

def foo(x: A): Future[B] = {...}
def mapFutures(xs: Future[List[A]]): Future[List[B]]

函数mapFutures应该使用foo转换列表的每个元素,并返回列表的未来.最好的方法是什么?

解决方法

你应该能够做你想做的事情(注意我将类型A和B指定为Int和String以使事情更容易理解):

def foo(x: Int): String = x.toString 

def mapFutures(xs: Future[List[Int]]): Future[List[String]]  = {
  for(list <- xs) yield list map foo
}

现在,如果你想要更通用的东西,那么你可以像这样定义mapFutures:

def mapFutures[A,B](xs: Future[List[A]],f:A => B): Future[List[B]]  = {
  for(list <- xs) yield list map f
}

然后它可以像这样使用:

val futs = Future(List(1,2,3))
val mappedFuts = mapFutures(futs,foo)

编辑

现在,如果foo返回Future,你可以这样做:

def foo(x: Int): Future[String] = Future(x.toString) 

def mapFutures[A,f:A => Future[B]): Future[List[B]]  = {
  for{
    list <- xs
    mapped <- Future.sequence(list map f)
  } yield mapped
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读