scala - Scala:如何在 map/foreach 迭代之间等待?
问题描述
我现在卡住了,答案可能在谷歌的某个地方,但我不知道这次该用什么词,所以我希望有人能在这里帮助我。
我有一个元素列表,我想对每个元素应用一个函数,但我想在每个元素之间等待。
我现在有类似的东西:
val numbers = List(10, 11, 12,13,14)
numbers.foreach(i => {
//do some stuff with i
Thread.sleep(1000)
})
但我认为这不是正确的做法。也许有一种方法不会阻止一切?
解决方案
在 JVM 上的普通 Scala 中,您可以使用 Java ScheduledExecutorService
:
val list: List[Int] = List(1,2,3)
private val es: ScheduledExecutorService = Executors.newScheduledThreadPool(1)
type ResultType = Unit
val futures: Seq[ScheduledFuture[ResultType]] = list.zipWithIndex.map { case (integer, index) =>
val runnable: Callable[ResultType] = () => println(integer)
es.schedule(runnable, index*1, duration.SECONDS)
}
实际上有一个关于预定 Scala 未来的话题 - Scala - ScheduledFuture
借助这种方法,您可以编写我上面介绍的相同逻辑:
val list: List[Int] = List(1,2,3)
type ResultType = Unit
val futures: Seq[Future[ResultType]] = list.zipWithIndex.map { case (integer, index) =>
DelayedFuture(index * 1.seconds)(println(integer))
}
推荐阅读
- angular - Angular PWA swPush.requestSubscription() 不起作用,错误:此浏览器禁用或不支持服务工作者
- google-sheets - 复制到 Google 工作表
- go - 为什么golang strings.Builder会这样实现String()?
- scrapy - 如何从 1.8.0 更新 scrapy。到 Ubuntu 18.04 上的最新 (2.1.0)
- python - python方法按特定顺序调用
- sql-server - 当 isedit != 1 时触发更新以防止更新
- java - Hibernate ManyToMany 双向关系不获取子实体中的父实体
- autocomplete - 如何在空手道中自动完成步骤定义
- c++ - 为什么要检查 Base 是 Derived 的私有基还是受保护基?
- python - 如何在 python 中记录部分应用的函数?