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

4

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

你试图实现的更大目标是什么?为什么要在Java代码中使用Scala Map? - Tyler
我正在使用kafka的AdminClient类,它返回一个collections.scala.immutable.Map。我想能够创建一个这样的Map,以便在单元测试中模拟返回它。 - spillthebeans
那么,当你尝试它时发生了什么? - Dima
我得到了“找不到符号:Predef.<Tuple2<A,B>>conforms()” 的错误。 - spillthebeans
尝试使用 scala.Predef.conforms<Tuple2<A,B>>() - Dima
3个回答

4

我改变了符合 $conforms 的内容,现在它在Intellij和命令行中都可以正常运行,但是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()
        );
    }

非常感谢,太好了!不知道为什么Intellij会抛出那个错误。 - Abi Vignesh

2

您的代码是正确的。问题很可能是由于您构建或运行代码的方式存在问题,或者您没有所有必要的导入。以下内容适用于Eclipse中Scala IDE版本4.6.1和Scala 2.12:

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);
    }
}

0
我在 IntelliJ 中遇到了这个问题,但最终发现只是一个 IntelliJ 编译器错误,并且可以通过 maven 正常运行。尝试运行/构建您的代码,看看是否只是编译器错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接