使用返回 Future 的函数映射 Stream

2024-04-04

有时我发现自己处于这样的境地:Stream[X], and a function X => Future Y,我想组合成一个Future[Stream[Y]],而且我似乎找不到办法做到这一点。例如,我有

val x = (1 until 10).toStream
def toFutureString(value : Integer) = Future(value toString)

val result : Future[Stream[String]] = ???

I tried

 val result = Future.Traverse(x, toFutureString)

它给出了正确的结果,但似乎在返回 Future 之前消耗了整个流,这或多或少地破坏了目的

I tried

val result = x.flatMap(toFutureString)

但这不能编译type mismatch; found : scala.concurrent.Future[String] required: scala.collection.GenTraversableOnce[?]

val result = x.map(toFutureString)

返回有点奇怪和无用的Stream[Future[String]]

我应该在这里做什么来解决问题?

编辑:我没有陷入困境Stream,我对在Iterator,只要在开始处理头部之前它不会阻止评估所有项目

Edit2:我不是 100% 确定 Future.Traverse 构造需要在返回 Future[Stream] 之前遍历整个流,但我认为确实如此。如果没有,这本身就是一个很好的答案。

Edit3:我也不需要结果按顺序排列,我对返回的流或迭代器的顺序很满意。


你走在正确的轨道上traverse,但不幸的是,在这种情况下,标准库的定义似乎有点被破坏——它不需要在返回之前消耗流。

Future.traverse是一个更通用函数的特定版本,适用于包装在“可遍历”类型中的任何应用函子(请参阅these http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/#iterator papers http://www.soi.city.ac.uk/~ross/papers/Applicative.html或我的答案here https://stackoverflow.com/a/12358892/334519例如,了解更多信息)。

The Scalaz https://github.com/scalaz/scalaz库提供了这个更通用的版本,在这种情况下它按预期工作(请注意,我正在获取适用函子实例Future from scalaz-contrib https://github.com/typelevel/scalaz-contrib;它还没有出现在 Scalaz 的稳定版本中,它仍然是针对 Scala 2.9.2 交叉构建的,而 Scala 2.9.2 没有这个Future):

import scala.concurrent._
import scalaz._, Scalaz._, scalaz.contrib.std._

import ExecutionContext.Implicits.global

def toFutureString(value: Int) = Future(value.toString)

val result: Future[Stream[String]] = Stream.from(0) traverse toFutureString

这会立即以无限流的形式返回,因此我们可以确定它不会首先被消耗。


作为脚注:如果你看来源 https://github.com/scala/scala/blob/v2.10.2/src/library/scala/concurrent/Future.scala#L577 for Future.traverse你会看到它的实现方式是foldLeft,这很方便,但对于流来说不是必需的或不合适的。

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

使用返回 Future 的函数映射 Stream 的相关文章

  • Scala 中使用转义特殊字符解码字符串问题

    我有一个多行 JSON 文件 其中包含编码为十六进制的特殊字符的记录 以下是单个 JSON 记录的示例 x22value x22 x22 xC4 xB1arines Bint xC4 xB1 xC3 xA7 Ramu xC3 xA7lar
  • 如何使用 C# 上传文件并将其保存到 Stream 以便进一步预览?

    有没有办法上传文件 将其保存到流中 该流我会将其临时保存在会话中 最后 我将尝试预览此会话中的此上传文件 例如 pdf 文件 Thanks EDITED 这就是我想做的 HttpPostedFileBase hpf Request File
  • Liftweb 环境中的后台任务

    我必须编写守护进程 并且我想使用模型来连接到数据库和一些有用的 Lift 类 是否可以运行 Rails 的 rake 任务的模拟 Scala 社区组上也有类似的问题 答案是使用Actors来做后台处理
  • 在 Qt 中使用多个不同的流读取同一文件

    使用 Qt 是否可以使用多个流读取文件以同时访问其中的不同数据部分 请注意 Qt 中的流 QTextStream QDataStream 不处理底层设备中的位置 流类只是一个包装器 用于更轻松地解析设备 QFile 实例 内的二进制数据 因
  • Scala - 如何解决“值不是 Nothing 的成员”错误

    此示例代码基于 Atmosphere 类 但如果有人可以让我了解该错误的一般含义 我想我可以找出任何特定于 Atmosphere 的解决方案 val bc BroadcasterFactory getDefault lookup broad
  • 宏:knownDirectSubclasses 被嵌套类型破坏?

    我有一个宏 它枚举密封特征的直接子类型 import scala reflect macros Context import language experimental macros object Checker def apply A U
  • Scala Array.apply 有何魔力

    来自 scala 2 10 4 的 array scala Array定义为 final class Array T length Int extends java io Serializable with java lang Clonea
  • 如何抑制spark输出控制台中的“Stage 2===>”?

    我有数据帧并试图获取不同的计数并且能够成功获取不同的计数 但是每当 scala 程序执行时我都会收到此消息 Stage 2 gt 1 1 2 我如何在控制台中抑制特定的此消息 val countID dataDF select substr
  • 阶乘的 Scala 排列

    我怎样才能找到n Scala 中某些字母的排列 Scala 2 9 RC1 scala gt abc permutations toList res58 List String List abc acb bac bca cab cba
  • 在 Python 中使用音频流 RTMP 通过管道和 OpenCV 到 FFmpeg

    我正在尝试使用音频流式传输 FFmpeg 我将在下面展示我的代码 导入模块 import subprocess as sp 创建变量 rtmpUrl rtmp a rtmp youtube com live2 key camera path
  • 在 C# 中使用(IDisposable obj = new ...) 在流中写入代码块(例如 XML)

    我已经开始使用实现 IDisposable 的类通过 using 语句在流中写入块 这有助于保持正确的嵌套并避免丢失或错误放置开始 结束部件 基本上 构造函数写入块的开头 例如打开 XML 标签 Dispose 写入结束 例如关闭 XML
  • 通用特征的隐式转换

    我正在实现一个数据结构 并希望用户能够使用任何类型作为密钥 只要他提供一个合适的密钥类型来包装它 我有这个关键类型的特质 这个想法是进行从基类型到键类型的隐式转换 反之亦然 实际上 只使用基类型 该特征看起来像这样 trait Key T
  • 如何捕获 Oozie Spark 输出

    有没有办法捕获spark的输出然后将其输入到shell上 我们当前正在使用 scala 创建 jar 文件 并希望我们的 Spark 输出成为 shell 输入 我的想法是使用 wf actionData spark XXXX var 我只
  • 如何在 Scala 中打印任何内容的列表?

    目前我有一个打印整数的方法 def printList args List Int Unit args foreach println 我如何修改它 使其足够灵活 可以打印任何内容的列表 您不需要专用的方法 所需的功能已经在集合类中 pri
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Child_process 处理带有回车符 (\r) 的 STDOUT 流

    我正在编写一个简单的应用程序 它允许工作中的内部系统请求从远程服务器到使用 REST 调用发起的另一个远程服务器的复制过程 使用 rsync 我已经对express框架足够熟悉 并且刚刚开始尝试child process库 并偶然发现了一个
  • 为什么《Scala 中的函数式编程》一书的“无异常处理错误”一章中没有提到“scala.util.Try”?

    在 Scala 中的函数式编程 一书中的 无异常处理错误 一章中 作者给出 从函数体抛出异常的问题 Use Option如果我们不关心实际的异常 Use Either如果我们关心实际的异常 But scala util Try没有提到 从我
  • 错误:协变类型 A 出现在逆变位置

    我试图写一个不可变的Matrix A 班级 我希望该类是协变的A但是当我把 在 前面A编译器开始抱怨类中的某些操作 以下是我的相关子集Matrix类 实际类比以下子集大 5 倍左右 class Matrix A private val co
  • 玩:将表单字段绑定到双精度型?

    也许我只是忽略了一些明显的事情 但我无法弄清楚如何将表单字段绑定到 Play 控制器中的双精度型 例如 假设这是我的模型 case class SavingsGoal timeframeInMonths Option Int amount
  • 在 Scala 中,使用“_”和使用命名标识符有什么区别?

    为什么当我尝试使用时会出现错误 而不是使用命名标识符 scala gt res0 res25 List Int List 1 2 3 4 5 scala gt res0 map gt item toString

随机推荐

  • HTML 5 视频流 .ism 文件?

    我有一个带有媒体服务 4 0 的 IIS 7 0 服务器设置 我创建了一个非常简单的 html 5 页面 其中包含video以其source指向一个 ism文件 是否可以使用 html 5 中的 ism 文件的清单来播放视频 就像在 sil
  • WordPress 插件 WooCommerce,自定义支付网关设置未保存

    我正在为 WordPress 插件 WooCommerce 开发自定义支付网关 我似乎无法保存支付网关的设置 当我在字段中输入信息然后单击 保存 时 页面刷新 所有字段均为空白 我究竟做错了什么 这是我的代码
  • 将参数传递给mapDispatchToProps()

    我不能撒谎 我对 React Redux 有点困惑 我认为很多操作都需要参数 例如从商店中删除项目 但即使我仍在阅读如何以这种方式从组件分派来传递参数 现在大约 2 小时 我没有得到任何答案 我被尝试过this props dispatch
  • Python 和/或 C/C++ 中的高精度算术?

    摘要 哪个 Python 包或 C 库是非常高精度算术运算的最佳选择 我有一些转换小数天数的函数 0 0 0 99999 转换为人类可读的格式 小时 分钟 秒 但更重要的是 毫秒 微秒 纳秒 转换是通过以下函数完成的 请注意 我还没有实施时
  • .Net DataView 和 DataTable 绑定

    我有一个简单的 Windows 窗体应用程序 它将 DataView 绑定到 ListBox 此 DataView 使用 Linq 按特定列降序对我的 DataTable 进行排序 然后我的列表框绑定到数据视图 然后我有一个简单的表单来将数
  • 每次发布后我应该关闭通道/连接吗?

    我在 Node js 中使用 amqplib 但我不清楚代码中的最佳实践 基本上 我当前的代码调用amqp connect 当 Node 服务器启动时 然后为每个生产者和每个消费者使用不同的通道 而不会真正关闭它们中的任何一个 我想知道这是
  • 在 dplyr 中过滤字符串列上的多个值

    我有一个data frame其中一列中包含字符数据 我想过滤多个选项data frame来自同一列 有没有一种简单的方法可以做到我所缺少的 Example data frame name dat days name 88 Lynn 11 T
  • 如何创建案例类的随机实例?

    假设我有几个案例类 例如 case class C c1 Int c2 Double c3 Option String case class B b Int cs Seq C case class A a String bs Seq B 现
  • 在线算法和离线算法有什么区别?

    这些术语在我的数据结构教科书中使用过 但解释非常简洁且不清楚 我认为这与算法在每个计算阶段拥有多少知识有关 请不要链接到维基百科页面 我已经阅读过它 并且仍在寻找澄清 像我十二岁一样的解释和 或示例会更有帮助 维基百科 维基百科页面非常清楚
  • 进程本地覆盖名称解析?

    我有测试代码 我希望在测试时将几个主机名解析为环回 部署后 此代码将根据需要使用正常的系统名称解析 测试和部署主机是最新的 Linux 发行版 例如 SLES11SP1 我想覆盖单个进程的主机名解析 而不是超级用户 有没有办法操纵nsswi
  • Django - 收到来自外部站点的流请求

    如何使用 Django 从用户请求触发的外部 API 获取数据 并将其直接流回请求周期而不使用 或渐进 最小 内存使用 背景 作为连接外部托管微服务的短期解决方案 需要限制用户对未经身份验证的 API 的访问 基于 Django 应用程序的
  • 如何从 ggplot2 包中仅绘制 geom_point 中的一系列值?

    Hello All I have the following molten data X variable value 1 StationA SAR11 cluster 0 001309292 2 StationB SAR11 cluste
  • 登录后保持会话 - selenium - javascript

    我正在尝试使用 selenium web driver 和 Node js 自动化几个页面 我能够登录 但登录后我想使用由网络驱动程序启动的相同会话 以便我可以在会话受保护的页面上进行自动测试 这是我的尝试 async function l
  • 如何将报表设计器标尺单位从英寸更改为厘米?

    一个简单的 我希望 问题 我正在使用 Visual Studio 我在 SQL Server Business Intelligence Development Studio 中创建一个新报告 在布局视图中 标尺的单位是英寸 我想将其更改为
  • Python函数返回字典?

    我是一名 Python 初学者 我遇到了一个我不理解的函数的输出 我无法提供所有代码 因为其中一些是我公司的 IP 我基本上使用我们的一位开发人员编写的库从数据仓库中提取指标 然后我想在另一个应用程序中使用这个指标值 当我获得该值时 我会将
  • 如何在 Gradle 中遮蔽传递依赖?

    有没有办法在 Gradle 中隐藏特定的 传递 依赖项 我的情况 我有一个项目直接依赖com amazonaws aws java sdk emr 1 10 33 and org apache hadoop hadoop aws 2 7 1
  • 如何使用 Scala Stream 类读取大型 CSV 文件?

    如何使用 Scala Stream 读取大型 CSV 文件 gt 1 Gb 你有代码示例吗 或者您会使用不同的方式来读取大型 CSV 文件而不先将其加载到内存中吗 只需使用Source fromFile getLines正如你已经说过的 这
  • 为什么我无法手动提交此表单?

    我试图在提交表单之前完成一些事情 以下代码运行没有错误 但我的表单从未提交 我不知道出了什么问题
  • 在Azure函数中设置cors标头

    在我的 Azure 函数中 我尝试设置 cors 标头 var response req CreateResponse HttpStatusCode OK response Content new ObjectContent
  • 使用返回 Future 的函数映射 Stream

    有时我发现自己处于这样的境地 Stream X and a function X gt Future Y 我想组合成一个Future Stream Y 而且我似乎找不到办法做到这一点 例如 我有 val x 1 until 10 toStr