我知道Future.sequence
调用可以将List[Future[T]]
转换为Future[List[T]]
,但如果我想反过来呢?
我想把一个Future[List[T]]
转换成一个List[Future[T]]
。
我想这样做的原因如下:
我发送一条消息给一个使用Slick3查询数据库的演员。Slick查询返回list: Future[List[T]]
。如果我可以将这个list
转换为list: List[Future[T]]
,那么我就可以做到:
list.map(convertToMessage).foreach(m => m pipeTo sender())
因此,基本上我想将从DB中提取的每条记录转换为消息,然后将其发送给调用参与者。
4条答案
按热度按时间13z8s7eq1#
我不认为这是可能的,对不起。
一个
Future[List[T]]
可以用一个空列表、一个包含一个元素的列表或任意多个元素的列表来完成。如果你把它转换成
List[Future[T]]
,那么这个列表会包含多少个Futures?e5nszbig2#
而不是使用akkas pipeTo模式,你可以做一些像这样的事情:
b09cbbtk3#
你为什么要这么做?你想达到什么目的?一旦你的未来解决了,列表中的所有项目都是可用的,所以你通过将它们中的每一个提升到自己的未来中来获得很少。
总之:
ltskdhd14#
我找不到
Future.InverseSequence
,但这可能是一个实现。