我需要用java代码创建一个不可变的Scala映射。我在这里找到了关于此的其他内容,但没有更新到当前版本。
我试过了:
public static <A, B> Map<A, B> toScalaMap(HashMap<A, B> m) {
return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
Predef.<Tuple2<A, B>>conforms()
);
}
答案 0 :(得分:2)
您的代码是正确的。问题可能是您构建或运行代码的方式存在问题,或者您可能没有完成所有必要的导入。以下内容适用于Eclipse和Scala 2.12的Scala IDE版本4.6.1:
package org.soreadytohelp;
import java.util.HashMap;
import scala.Predef;
import scala.Tuple2;
import scala.collection.JavaConverters;
import scala.collection.immutable.Map;
public class MapTest {
public static <A, B> Map<A, B> toScalaMap(HashMap<A, B> m) {
return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
Predef.<Tuple2<A, B>>conforms()
);
}
public static void main(String[] args) {
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("food", "bacon");
Map<String, String> hmAsScala = toScalaMap(hm);
System.out.println(hmAsScala);
}
}
答案 1 :(得分:1)
我更改了符合$ conforms,它现在在Intellij和命令行中运行find但是Intellij仍然在JavaConverters.mapAsScalaMapConverter(m).asScala()。toMap(它表示无法访问scala.Predef)下给出一个红线。 $ $少结肠结肠$
private <A,B> scala.collection.immutable.Map<A, B> toScalaMap(Map<A, B> m) {
return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
Predef.$conforms()
);
}
答案 2 :(得分:0)
我使用IntelliJ遇到了这个问题,但事实证明它只是一个IntelliJ编译器错误,并且能够通过maven运行就好了。尝试运行/构建代码以查看它是否只是编译器错误。