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

How to convert a java Map to immutable Scala map via java code?

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

您的代码是正确的。问题可能是您构建代码的方式或 运行 您的代码的问题,或者您可能没有所有必要的导入。以下适用于 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);
    }
}

我 运行 使用 IntelliJ 解决了这个问题,但事实证明它只是一个 IntelliJ 编译器错误,并且能够 运行 通过 maven 就好了。尝试 running/building 您的代码,看看它是否只是一个编译器错误。

我更改了 conforms to $conforms,它现在在 Intellij 和命令行中运行 find 但 Intellij 仍然在 JavaConverters.mapAsScalaMapConverter(m).asScala().toMap( 下显示一条红线,表示无法访问scala.Predef.$less$colon$colon.

private   <A,B> scala.collection.immutable.Map<A, B> toScalaMap(Map<A, B> m) {
        return JavaConverters.mapAsScalaMapConverter(m).asScala().toMap(
                Predef.$conforms()
        );
    }