Scala Future 和 java 8 CompletableFuture

2024-01-20

的简介CompletableFuturesJava 8 带来了可用的语言功能scala.concurrent.Future例如一元变换。

  • 有什么区别,以及为什么 Scala 开发人员应该更喜欢 Scala Futures 而不是 java 8CompletableFuture ?

  • 仍然有充分的理由使用scala.concurrent.Future在Java中通过akka.dispatch桥?


有什么区别?为什么 Scala 开发人员应该更喜欢 Scala Futures 而不是 java 8 CompletableFuture?

重新表述一下 @dk14 在评论中指出的内容,我想说的是CompletableFuture没有惯用的 Scala api。

对于 Scala 开发人员来说,影响是:

  • 缺乏 for 理解,因为它不遵循单子类型常见的 Scala 方法约定
  • 使用其大部分方法时需要 java-scala 互操作开销

还值得注意的是javaCompletableFuture不完全等同于 scalaFuture。它更像是scala的保险丝Future and Promise.

考虑到上面列出的缺点,使用没有多大意义CompletableFuture在 scala 中,除非您正在设计应该与 java 无缝互操作的公共 api。

仍然有充分的理由通过 akka.dispatch 桥在 Java 中使用 scala.concurrent.Future 吗?

我特别寻找在Java中使用akka.dispatch的理由,如果还有的话

Akka 构建于 scala 之上,有时会使用 scalaFutures。这意味着,如果您有部分代码是用 java 编写的,则值得将其包装在 scala api 中(使用akka.dispatchjava api) 以便能够轻松地与 akka 一起使用它。

例如,您正在用 java 实现 akka actor。当处理消息时,您想要进行一些非阻塞读取,完成后,应该将结果作为消息发送给另一个参与者。

你可以做的就是把你的 I/O 放入 javaCallable https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html,然后使用akka.dispatch.Futures#future http://doc.akka.io/api/akka/current/index.html#akka.dispatch.Futures%24@future%5BT%5D%28body:java.util.concurrent.Callable%5BT%5D,executor:scala.concurrent.ExecutionContext%29:scala.concurrent.Future%5BT%5D获得斯卡拉Future摆脱它,然后你可以利用 akkapipe http://doc.akka.io/api/akka/current/index.html#akka.pattern.package@pipe%5BT%5D%28future:scala.concurrent.Future%5BT%5D%29%28implicitexecutionContext:scala.concurrent.ExecutionContext%29:PipeToSupport.this.PipeableFuture%5BT%5D使未来的结果作为消息传递给某个参与者。

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

Scala Future 和 java 8 CompletableFuture 的相关文章

  • Oracle Java 教程 - 回答问题时可能出现错误

    我是 Java 新手 正在阅读 Oracle 教程 每个部分之后都有问题和答案 我不明白一个答案中的一句话 见下面的粗体线 来源是https docs oracle com javase tutorial java javaOO QandE
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 在 Scala 中设计方便的默认值映射

    我发现自己使用了很多嵌套映射 例如 Map Int Map String Set String 并且我希望在访问新密钥时自动创建新的 Map Set 等 例如 像下面这样 val m m 1992 foo bar 请注意 如果不需要 我不想
  • 删除优先级队列的尾部元素

    如何删除优先级队列的尾部元素 我正在尝试使用优先级队列实现波束搜索 一旦优先级队列已满 我想删除最后一个元素 优先级最低的元素 Thanks 没有简单的方法 将元素从原始元素复制到新元素 最后一个除外 PriorityQueue remov
  • 从 MS Access 中提取 OLE 对象(Word 文档)

    我有一个 Microsoft Access 数据库 其中包含一个包含 Microsoft Word 文档的 OLE 对象字段 我试图找到代码来检索保存在 OLE 对象中的文件 以便用户可以从我的 JavaFx 应用程序中的按钮下载它 但没有
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • Java:从集合中获取第一项

    如果我有一个集合 例如Collection
  • Scala UpperBound 和 LowerBound 概念

    下面是我尝试运行的代码 class Student def printDetails println I am a student def printSomeOtherDetails println I love Studying clas
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • 添加到列表时有没有办法避免循环?

    我想知道这样的代码 List
  • 在 Java 中通过 XSLT 分解 XML

    我需要转换具有嵌套 分层 表单结构的大型 XML 文件
  • 如何删除日期对象的亚秒部分

    当 SQL 数据类型为时间戳时 java util Date 存储为 2010 09 03 15 33 22 246 如何在存储记录之前将亚秒设置为零 例如 在本例中为 246 最简单的方法是这样的 long time date getTi
  • 如何从日期中删除毫秒、秒、分钟和小时[重复]

    这个问题在这里已经有答案了 我遇到了一个问题 我想比较两个日期 然而 我只想比较年 月 日 这就是我能想到的 private Date trim Date date Calendar calendar Calendar getInstanc
  • 我们如何测试包私有类?

    我正在看书Effective Java in Item 13 Minimize the accessibility of classes and members 它提到 为了方便测试 您可能想让类 接口或成员更易于访问 这在某种程度上是好的
  • 无法在 Java/Apache HttpClient 中处理带有垂直/管道栏的 url

    例如 如果我想处理这个网址 post new HttpPost http testurl com lists lprocess action LoadList 401814 1 Java Apache 不允许我这么做 因为它说竖线 是非法的
  • 如何从 Ant 启动聚合 jetty-server JAR?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • 何时使用本地演员和远程演员?

    我什么时候应该在 Akka 中使用 Actors 和 Remote Actors 据我所知 两者都可以扩展机器 但只有远程 Actor 可以扩展 那么普通 Actor 有任何实际的生产用途吗 如果远程 Actor 仅具有较小的初始设置开销

随机推荐

  • Azure Cosmos DB 多模型意味着什么?

    看着新的 Azure cosmos 数据库 我对它的多模型性质有点困惑 具体来说 是不是意味着 a 可以同时以多种方式查询相同的底层数据库 存储 以便我可以针对相同的集合使用 gremlin 图形查询和 mongodb api or b 这
  • 网页到印刷媒体——解决方案?

    我一直是 MediaWiki 和类似的基于 wiki 的文本编辑器的忠实粉丝 我喜欢快速添加文本 协作和共享的功能 然而 仍然需要格式良好的打印输出 像页眉和页脚 表达我想要它们表达的内容 分页符 页边距等 我见过的大多数解决方案都涉及到某
  • 在 SceneKit 中使用 Metal 着色器

    我想用一个Metal着色器将卡通 单元着色应用于场景中使用的材质 我试图实现的着色器是苹果自己的AAPLCelShader发现于金属着色器展示柜 https developer apple com library ios samplecod
  • 如何动态更改结构体的 json 标签?

    我有以下内容 package main import encoding json fmt os reflect type User struct ID int64 json id Name string json first want to
  • 我应该如何设置CLASSPATH?

    我之前这样做过 CLASSPATH home phenies jdk1 6 0 17 lib tools jar home phenies jdk1 6 0 17 lib dt jar 但今天一篇文章说我应该这样做 CLASSPATH ho
  • Pandas:将 group-key 作为 groupby.apply 中函数的参数

    我正在处理数据集df cities包含以下列 city name country name population language 我有以下函数可以根据国家 地区是否在某个列表中对表进行排序 special countries Morocc
  • 使用 ifelse 转换 R 中的列

    我有一个带有一列数字的数据框 在单独的列中 我想根据数字打印该数字是 小于 10 10 到 20 之间 还是 20 到 30 之间 到目前为止 我已经生成了这段代码 但到目前为止还不起作用 任何人都可以建议我如何修改它以使其起作用吗 cre
  • 添加 AUC 作为 keras 的损失函数

    有没有人有幸使用 Theano 为 Keras 编写自定义 AUC 损失函数 文档在这里 http keras io objectives http keras io objectives 示例代码在这里 https github com
  • 创建并写入具有“执行”权限的文件?

    我正在写一个bash带飞镖的脚本 下面的代码创建一个文件 但该文件没有 执行 权限 所以我无法通过执行 ex sh new File ex sh writeAsStringSync script str 也许 我需要设置FileStat h
  • 无法在未调用 Looper.prepare() 的线程内创建处理程序

    以下异常是什么意思 我该如何修复它 这是代码 Toast toast Toast makeText mContext Something Toast LENGTH SHORT 这是例外 java lang RuntimeException
  • 正则表达式更改特定字符串[重复]

    这个问题在这里已经有答案了 我正在从事一个翻译项目 当用户输入时我必须更改一些单词 例如 亚拉玛 gt 亚拉玛 亚拉马克 gt 亚拉马克 卡尔马迪 gt 卡马迪 萨拉马迪 gt 萨拉马迪 我的代码目前运行良好 但我有一个问题 如果我只输入
  • 从简单的 XML 文件到 XForms 的 XSL 转换并应用 CSS

    我正在将一些简单的 XML 文档转换为 XForms 并尝试向最终结果添加一些样式 我正在使用XSLT表格实现 我指向本地 CSS 文件 Twitter 的引导程序 所以 XML 文件看起来像这样
  • 为什么 new HashMap<> 在 JDK 1.6 中会产生错误,而在 1.7 中不会

    我注意到以下代码在使用 java 规范 1 7 的 eclipse 中编译时可以工作 但不能在 1 6 下工作 HashMap
  • 如何创建类的实例并注入服务?

    新的 aspnet 具有内置依赖注入 启动类实例接收服务 控制器 视图组件 有什么方法可以让我创建我的类的对象并使用 aspnet 功能传递服务吗 就像是 WebApplicationClassesActivator Create type
  • 无法在 Angular 9 中进行默认导入

    我变了tsconfig json通过添加此属性 esModuleInterop true allowSyntheticDefaultImports true 为了能够导入 npm 包import as ms from ms 但我仍然收到此错
  • 如何从 .sikuli 文件夹中检索代码?

    当我打开一个 sikuli文件夹 里面只有图像 所以我想知道是否有任何方法可以在不使用 Sikuli IDE 的情况下查看或检索 Sikuli 代码 我可以从 sikuli文件夹 根据文档 http doc sikuli org devs
  • 没有事务的 JPA 更新查询 - 事务是强制性的吗?

    我正在尝试使用 JPA 通过本机查询进行插入 但我不想创建事务 Query query em createNativeQuery INSERT INTO person id firstname lastname VALUES 1 Ronni
  • iOS 8 CGAffineTransformMakeScale + 自动布局不再工作

    似乎有一些帖子与我的问题相关 但似乎没有任何帮助 使用自动布局时如何调整 CALayer 的锚点 https stackoverflow com questions 12943107 how do i adjust the anchor p
  • 如何使用 IN 条件访问 SQLite.swift 中的 FTS 表

    我正在尝试使用 SQLite swift 查询 FTS 表 之前我在Android上做过 https stackoverflow com questions 29815248 full text search example in andr
  • Scala Future 和 java 8 CompletableFuture

    的简介CompletableFuturesJava 8 带来了可用的语言功能scala concurrent Future例如一元变换 有什么区别 以及为什么 Scala 开发人员应该更喜欢 Scala Futures 而不是 java 8