操作演示

简单上手

转换需要额外的包

1
2
3
4
5
<dependency>
    <groupId>org.scala-lang.modules</groupId>
    <artifactId>scala-java8-compat_2.12</artifactId>
    <version>0.8.0</version>
</dependency>

主要是 FutureConverters 的 .toScala() .toJava() 两个方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.time.{Duration => jduration}

val request = HttpRequest.newBuilder.uri(URI.create("https://www.baidu.com/"))
.timeout(jduration.ofMinutes(2))
.build
val java8Future: CompletableFuture[HttpResponse[String]] = HttpClient.newBuilder
.connectTimeout(jduration.ofSeconds(3)).build
.sendAsync(request, HttpResponse.BodyHandlers.ofString)

println("java版-- Future -- ready")

import scala.concurrent.ExecutionContext.Implicits.global

// 切换为scala版的 future
val future01: Future[HttpResponse[String]] = FutureConverters.toScala(java8Future)
val future03: Future[Int] = future01 map { resp =>
val str = resp.body()
println(str)
"产生-- future02"
} map { str =>
println("产生-- future03")
666
}

// val value: CompletionStage[Int] = FutureConverters.toJava(future03)

val num: Int = Await.result(future03, Duration.create(4, "second"))
println(num)
println("main -- done")