我想将下面方法的返回类型更改为< code>Future[Unit]
def send(data: Array[Byte]): CompletableFuture[Void] = {
val f:CompletableFuture[Void] = client.send(data)
f
}
我使用的是Scala 2.12.1。是否有任何方便的方法可以将Java 8<code>CompletableFuture
要将CompletableFuture转换为Scala的未来并摆脱包装的CompletefulException::
package mycompany.common.concurrent
object Extensions {
implicit class UnwrappedCompletableFuture[T](cf: CompletableFuture[T]) {
import scala.jdk.FutureConverters._
def toScala: Future[T] = {
val f = cf.asScala
f.recover {
case ex: CompletionException if ex.getCause != null => throw ex.getCause
}(ExecutionContext.global)
}
}
}
用法:
import mycompany.common.concurrent.Extensions._
val result = fetcher.fetchAsync().toScala.recover {
case ex: YourActualException =>
}
虽然asker(在2017年)提到了2.12,但现在我们有了2.13,转换变得更加容易:
从 Scala 2.13 开始,标准库包含 scala.jdk.FutureConverters,它提供了 Java 到 Scala CompletableFuture/Future 隐式转换:
import scala.jdk.FutureConverters._
val scalaFuture = javaFuture.asScala
将Java未来转换为Scala未来
是的,它叫做scala-java8-compat,这就是你要找的方法。
在我的项目中,我有一个Akka层,它返回一个,接收Future的部分是Java风格。 团队中的人不了解Scala,他们宁愿使用,因为他们更了解Java 8 API。 有没有什么好方法可以将一个转换成一个?。 显然是以非阻塞的方式。 当做
问题内容: Java 8引入了可组合的Future的新实现(包括一堆thenXxx方法)。我想专门使用它,但是我想使用的许多库仅返回非可组合实例。 有没有一种方法可以将返回的实例包装在内,以便我可以编写它? 问题答案: 有一种方法,但是您不喜欢它。以下方法将a 转换为a : 显然,这种方法的问题在于,对于每个 Future ,都会阻塞线程以等待 Future 的结果-与 Future 的想法相矛盾
我有一个方法,它返回CompletableFuture 但是当我调用第二个< code>doTransmit(notification,receivers,null)时。然后接受(列表- 我是概念的新手。但是,我知道Javascript Promises。请帮忙。
在我的应用程序中,我正在将java.concurrent.future转换为Twitter Future,如下所示: 这是正确的做法吗,或者有更好的方法吗?
我是java.time包的新手。我有一个本地日期是2015-12-10。我需要将此转换为ZonedDateTime。时间应该是00:00:00,区域是zoneoffset.utc。 dateTimeException:无法从java.time.localDate类型的TemporalAccessor:2015-12-10获取Instant 我也试过: 这会产生意想不到的结果。 我查看了API并尝试
我试图使用以下公式将Future[Seq[(String,String)]转换为Future[Seq[(String)]: 所以 sortedSeq 是 Future[Seq[(String, String)]] 但我一直得到错误: 我做错了什么?