Java Call Scala HashMap的getOrElse

时间:2016-10-12 15:31:06

标签: java scala lambda java-8

我的java代码看起来像(java8,支持lambda):

import scala.collection.mutable.HashMap;
...
public void test() {
  HashMap<Integer, String> map = new HashMap<>();
  map.put(1, "Hello");

  // ERROR: parameter need Function0<B1>. given int, ()->"World".
  map.getOrElse(1, () -> "World");
}

当我构建项目时,它告诉我parameter need Function0<B1>. given int, ()->"World". 但我的IDE(Idea)并没有提醒我这是一个错误,即使它提示我减少代码&#34; new Function0(){...}&#34;到&#34;() - &gt;世界&#34 ;. 那么如何在java代码(java8)中调用scala(HashMap)的getOrElse方法?

1 个答案:

答案 0 :(得分:3)

我认为问题在于Java8功能接口不能直接转换为scala函数。

这将在Scala 2.12中解决(如here所述)。解决方案似乎是使用包装器为您进行转换。

更多详情here,自述文件中给出的示例是您正在寻找的内容:

import scala.concurrent.*;
import static scala.compat.java8.JFunction.*;

class Test {
    private static Future<Integer> futureExample(Future<String> future, ExecutionContext ec) {
        return future.map(func(s -> s.toUpperCase()), ec).map(func(s -> s.length()), ec);
    }
}