【问题标题】:How to convert a java Map to immutable Scala map via java code?如何通过 java 代码将 java Map 转换为不可变的 Scala map?
【发布时间】:2017-12-15 23:09:43
【问题描述】:

我需要用 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 映射?
  • 我正在使用返回 collections.scala.immutable.Map 的 kafka AdminClient 类,我希望能够创建一个这样我就可以在单元测试中模拟返回它。跨度>
  • 那么,你尝试的时候发生了什么?
  • 我找不到符号:Predef.>conforms()
  • 试试scala.Predef.conforms&lt;Tuple2&lt;A,B&gt;&gt;()

标签: java scala collections scala-collections


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我更改了符合 $conforms 并且它现在在 Intellij 和命令行中运行 find 但 Intellij 仍然在 JavaConverters.mapAsScalaMapConverter(m).asScala().toMap( 下显示红线表示无法访问 scala.Predef。 $less$冒号$冒号。

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

    【讨论】:

    • 非常感谢。有效 !想知道为什么 Intellij 会抛出该错误
    【解决方案3】:

    我在使用 IntelliJ 时遇到了这个问题,但结果证明它只是一个 IntelliJ 编译器错误,并且能够通过 maven 正常运行。尝试运行/构建您的代码,看看它是否只是编译器错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2019-11-20
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多