有连续的 Future.find 吗?

2023-12-02

我有一些副作用功能,

def f(): Future[Int] = {
  val n = Random.nextInt()
  println(s"Generated $n")
  Future(n)
}

我想重复执行它,直到谓词返回 true。

def success(n: Int): Boolean = n % 2 == 0

我的计划是建立Stream结果

val s = Stream.fill(10)(f)

然后使用Future.find得到第一个满足谓词的结果。

Future.find(s)(success) map println

问题是Future.find并行运行所有 future,我希望它一个接一个地依次执行 future,直到谓词返回 true。

scala> Future.find(s)(success) map println
Generated -237492703
Generated -935476293
Generated -1155819556
Generated -375506595
Generated -912504491
Generated -1307379057
Generated -1522265611
Generated 1163971151
Generated -516152076
res8: scala.concurrent.Future[Unit] = scala.concurrent.impl.Promise$DefaultPromise@37d28f02
Some(-1155819556)

问题是如何顺序执行 future 流直到谓词返回 true?标准或第三方库中有合适的函数吗?


我建议使用另一种方法,而不是使用 Stream。递归地使用 Future 的过滤器和recoverWith:

def findFirst[A](futureGen: => Future[A], predicate: A => Boolean): Future[A] = {
  futureGen.filter(predicate).recoverWith { case _ => findFirst(futureGen, predicate) }
}

findFirst(f, success)

这将依次调用 Future,直到“成功”返回 true。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有连续的 Future.find 吗? 的相关文章

随机推荐

  • GCP 负载均衡器 502 服务器错误和“backend_connection_lined_before_data_sent_to_client”IIS 10

    我有 GCP 负载均衡器和 4 个 IIS 10 Web 服务器 偶尔它会附带502 服务器错误 在日志中它显示这是因为backend connection close before data sent to client 我已经读过这篇文
  • Powerpoint Viewer 控件 C# / VB / .NET

    有人知道如何制作一个或如何下载一个控件来查看powerpoint文档吗 我已经搜索过 但唯一出现的是this 这绝对不是免费的 我确信微软一定已经有一个可以做到这一点的控件 做一个控件来做这件事也很受欢迎 这里有我所关心的问题的解决方案 如
  • 如何在c#中使用HttpClient GetAsync方法传递请求内容

    如何传递请求内容HttpClient GetAsync方法 我需要根据请求内容获取数据 HttpGet public async Task
  • golang解组复杂的json

    我有以下 JSON blob 我正在尝试将其解码为 Go contig 32 a 33 41 35 b 44 34 42 我相信我必须对 JSON 的数据结构进行建模 我尝试使用一个名为的结构Line package main import
  • ggplotly-object 的部分阴影背景

    我正在尝试使用 ggplot2 创建时间序列的线图并将其转换为绘图 该图背景的一部分应该用不同的颜色着色 如下所示 在 R 中使用 geom rect 进行时间序列着色 不幸的是 annotate 以及 geom rect 并未像看起来那样
  • 我们如何在WPF应用程序中分离单击和双击列表视图?

    我有一个 WPF 应用程序 有一个列表视图 每次我单击或双击时 都会触发单击事件 即使我保留单击事件 当我双击它时它也会自动触发 如果我在 DoubleClick 中绑定该操作 则单击时它将无法工作 我该如何分别处理两者 将处理程序添加到您
  • 我使用 jasper 报告时出现 FileNotFoundException

    我正在尝试在 Liferay portlet 中创建 Jasper 报告 但出现以下错误 Caused by net sf jasperreports engine JRException java io FileNotFoundExcep
  • 在 3.2 中使用 VAO 和 VBO 绘制 OpenGL 直线和正方形

    我一直在尝试 OpenGL 3 2 我可以成功地将一条线渲染到屏幕上 或者渲染一个由两个三角形组成的正方形 我认为我正确使用了 VAO 和 VBO 但不知何故我无法渲染它们 我遇到了奇怪的渲染 显然 我编码错误 但是当渲染不同数组中定义的多
  • 本机控件 iOS HTML5 和 Cordova 应用程序上的语言错误

    我使用 HTML5 和 Cordova 2 9 构建了一个适用于 Android iOS 的应用程序 我仅在 iOS 上遇到一个奇怪的问题 每次显示本机控件时 例如 当
  • 正向lookbehind正则表达式明显的最大长度

    所以我一直在尝试使用正则表达式来解析以下字符串 INFO Device 6 Time 20 11 2015 06 28 00 Script FunFehlerButton Execute 0031 text and INFO Device
  • 如何在 Flutter 中隐藏 Android StatusBar

    如何在 Flutter 应用程序中隐藏 Android 状态栏 SystemChrome setEnabledSystemUIOverlays 应该做你想做的事 你可以把它带回来SystemChrome setEnabledSystemUI
  • Android 中的 SAX XML 解析

    XML 代码是
  • 在laravel中导入vue包

    在 laravel 5 6 中导入 vue 包的正确方法是什么 它预装了 vue 和 bootstrap 我看到它们都是从 public 目录编译到 app js 中的 但我可以弄清楚如何导入https github com moreta
  • Xcode“应用程序窗口预计在应用程序启动结束时有一个根视图控制器”错误

    我对此很陌生 我正在制作我的第一个应用程序 当我尝试运行它时 xcode 说它成功了 但模拟器只是给我一个黑屏 然后我收到此消息 这是我的 main m 代码 implementation ViewController synthesize
  • 获取 PHP 中常量的定义类

    我想使用反射来获取 PHP 中的类定义的常量列表 目前使用反射我可以获得常量列表 但这也包括在继承类中声明的常量 有没有一种方法我可以使用 给定一个类 仅获取该类定义的常量 给定一个常量和一个类 检查该常量是否由该类定义 不是继承或扩展的父
  • 如何防止 Eclipse 在启动时挂起?

    我正在使用 Eclipse 3 3 Europa 有时 Eclipse 需要花费非常长的时间 也许永远 来启动 我在 Eclipse 日志中唯一能看到的是 ENTRY org eclipse core resources 2 10035 2
  • 船不会发射子弹蟒蛇速成课程第二版

    您好 我将不胜感激您提供有关为什么子弹没有发射的帮助 我按照书中的所有步骤操作 但它不起作用 Bullet py文件是新编写的 settings py中的 bullet settings 也是新编写的 并且alien invasion py
  • iOS测量网页加载时间

    我搜索了很多 但找不到用 iOS 测量网页加载时间的方法 在应用程序中 我想显示特定的页面加载时间 iOS sdk 或第三方 sdk 是否可以 Thanks 您可以加载 URL 请求并使用 NSDate 来查看花费了多长时间 假设您使用 U
  • 转换为 JSON 时对象属性消失[重复]

    这个问题在这里已经有答案了 这是我的班级 export class Patient constructor public id number public name string public location string public
  • 有连续的 Future.find 吗?

    我有一些副作用功能 def f Future Int val n Random nextInt println s Generated n Future n 我想重复执行它 直到谓词返回 true def success n Int Boo