Scala 多次呼叫以获得收益

Scala 多次呼叫以获得收益,scala,future,Scala,Future,我不明白如何在中的每个元素上调用我的函数doSomething(),以便理解并使用futures进行管理,因为这里有.map 我不确定这样做的好方法是什么。是否将用于理解与doSomething()一起使用 def myFunc(操作(id:List[ids]):Future[MyBean]={ 为了{ 第一 myDAO.doSomething(id) } 这一行之后的第二个: ids.map{ id => myDAO.doSomething(id) } 您将获得

我不明白如何在
中的每个元素上调用我的函数
doSomething()
,以便理解
并使用futures进行管理,因为这里有
.map

我不确定这样做的好方法是什么。是否将
用于理解
doSomething()
一起使用

def myFunc(操作(id:List[ids]):Future[MyBean]={
为了{
第一
myDAO.doSomething(id)
}
这一行之后的第二个:

  ids.map{ id =>
      myDAO.doSomething(id)
    }
您将获得期货列表
list[Future[A]]
。要将其与另一个期货进行平面映射,您需要将其转换为
Future[list[A]
。要实现此目的,您可以使用
Future.sequence
。此外,您还可以使用
Future.traverse

Future.traverse(ids)(myDao.doSomething)
在这种情况下,可以避免使用
map

最后,可以按如下方式进行:

  for {
    first <- Future.sequence(ids.map(id => myDAO.doSomething(id)))
    second <- myDAO.doSomehtingElse(ids)
  } yield {
    MyBean(first, second)
  }
用于{
第一个myDAO.doSomething(id)))

第二,如果你想为每个id调用
doSomeghing
,那么你会有很多
first
值,那么MyBean需要一个未来列表,或者你想创建很多MyBean?
  for {
    first <- Future.sequence(ids.map(id => myDAO.doSomething(id)))
    second <- myDAO.doSomehtingElse(ids)
  } yield {
    MyBean(first, second)
  }
      for {
        first <- Future.traverse(ids)(myDAO.doSomething)
        second <- myDAO.doSomehtingElse(ids)
      } yield {
        MyBean(first, second)
  }