gpt4 book ai didi

scala - 映射列表的 Scala future

转载 作者:行者123 更新时间:2023-12-04 19:31:11 24 4
gpt4 key购买 nike

我有一个 future 列表,我想对其进行一一转换:

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

函数 mapFutures应该使用 foo 转换列表的每个元素,并返回列表的 future 。做到这一点的最佳方法是什么?

最佳答案

你应该能够像这样做你想做的事情(注意我将类型 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,B](xs: Future[List[A]], f:A => Future[B]): Future[List[B]] = {
for{
list <- xs
mapped <- Future.sequence(list map f)
} yield mapped
}

关于scala - 映射列表的 Scala future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20217742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com