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

Scala将Map [Int,Future [Seq [T]]]转换为Future [Map [Int,Seq

发布时间:2020-12-16 09:07:25 所属栏目:安全 来源:网络整理
导读:我怎样才能改变一个 Map[Int,Future[Seq[T]]] 至 Future[Map[Int,Seq[T]]] 在Scala没有等待未来. 例: Map( 1 - Future.successful(Seq(100,200,300)),2 - Future.successful(Seq(500,600,700))) 解决方法 这应该这样做: val m = Map( 1 - Future.successfu
我怎样才能改变一个

Map[Int,Future[Seq[T]]]

Future[Map[Int,Seq[T]]]

在Scala没有等待未来.

例:

Map( 
  1 -> Future.successful(Seq(100,200,300)),2 -> Future.successful(Seq(500,600,700))
)

解决方法

这应该这样做:

val m = Map( 
  1 -> Future.successful(Seq(100,700))
)

Future.sequence { m.map { case (i,f) => f.map((i,_))} }.map(_.toMap)

从内到外,我将键值从(Int,Future [T])映射到Future [(Int,T)],然后能够在结果序列的Futures上使用Future.sequence.然后,折叠后的Future可以映射回Map.

使用@ IonutG.Stan建议的Future.traverse可以稍微缩短一下:

Future.traverse(m){ case (i,_))}.map(_.toMap)

这将在m中构建一个Future的新集合,使用前面提供的相同函数将元组与期货映射到未来元组.

(编辑:李大同)

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

    推荐文章
      热点阅读