如何通过java代码将java Map转换为不可变的Scala映射?

时间:2017-07-11 18:32:04

标签: java scala collections scala-collections

我需要用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()
        );
}

3 个答案:

答案 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运行就好了。尝试运行/构建代码以查看它是否只是编译器错误。