Java Scala未来中的Lambda表达式
我使用的是Scala2.12.2和Java8。对于一个非常奇怪的情况,我需要在Java中使用Scala Futures,我发现在future操作符中使用Lambdas是行不通的Java Scala未来中的Lambda表达式,java,scala,java-8,scala-2.12,Java,Scala,Java 8,Scala 2.12,我使用的是Scala2.12.2和Java8。对于一个非常奇怪的情况,我需要在Java中使用Scala Futures,我发现在future操作符中使用Lambdas是行不通的 @Test public void test(){ Future<String> future = new Promise.DefaultPromise(); future.map(value -> value.toUpperCase()) .onComplete
@Test
public void test(){
Future<String> future = new Promise.DefaultPromise();
future.map(value -> value.toUpperCase())
.onComplete(value -> System.out.println(value));
}
但是在阅读了scala 2.12版的文档之后
我知道从现在起,Java8中的lambda表达式与ScalaAPI兼容
我误解了什么吗?这里很好用
scala.concurrent.Future<String> f = scala.concurrent.Future.successful("abc");
scala.concurrent.Future<String> f2 = f.map(s -> s.toUpperCase(), scala.concurrent.ExecutionContext.global());
f2.foreach(s -> {System.out.println(s); return null;}, scala.concurrent.ExecutionContext.global());
scala.concurrent.Future f=scala.concurrent.Future.successful(“abc”);
scala.concurrent.Future f2=f.map(s->s.toUpperCase(),scala.concurrent.ExecutionContext.global());
foreach(s->{System.out.println(s);返回null;},scala.concurrent.ExecutionContext.global();
我从未尝试过使用Java中的ScalaFuture
s。但我猜它不是一个要从Java使用的API。例如,几乎每种方法都需要隐式的ExecutionContext
。Java没有隐式。Java有自己的Future
s。我们有Scala+Java代码的保护,所以我们必须接受这样一个事实,Scala的未来将在Java环境中实现。嗨,Paul,DefaultPromise是一个实现细节,不供外部使用(在impl包中和被包保护中都可以看到)。你有没有想过用这个:嗯,我做错了什么?。我在Scala 2.12.2和JDK Java 8的项目中使用了IntelliJ和SDK。我还需要配置其他东西?我不知道。我的代码不适合你吗?顺便说一句,我只是用Java9和Scala2.12.3测试了它。你在用IntelliJ吗?
scala.concurrent.Future<String> f = scala.concurrent.Future.successful("abc");
scala.concurrent.Future<String> f2 = f.map(s -> s.toUpperCase(), scala.concurrent.ExecutionContext.global());
f2.foreach(s -> {System.out.println(s); return null;}, scala.concurrent.ExecutionContext.global());