尝试将 HashMap 转换为 Scala ListMap

Trying to convert a HashMap into a scala ListMap

所以,有一个特定的 class,我在某个框架中覆盖它(不相关,但它是 Play 的 SecureSocial 框架)。我覆盖的方法具有签名:

在 Scala 中:

override val providers : scala.collection.immutable.ListMap[scala.Predef.String, securesocial.core.IdentityProvider] = { /* compiled code */ }

所以,我简单的写成:

@Override
ListMap<String, IdentityProvider> providers() { ... }

问题是我唯一能用 Java 中的 ListMap 做的是:

new ListMap<>();

这不是很有用。我想要覆盖的 Map 是通过 DI 注入的,而我拥有的是 java.util.HashMap。所以,我的方法是这样的:

@Override
ListMap<String, IdentityProvider> providers() {
    Map<String, IdentityProvider> providerMap = this.providerMap;
    toScalaListMap(providerMap);
}

当然,toScalaListMap是不存在的。我该如何着手编写它?我试过在线搜索并查看 Scala 文档,但鉴于我目前对 Scala 的了解为零,我不知道从哪里开始。为了以防万一,我在这个问题中添加了 securesocial 标签。

在 Java collection 上有一个 asScala 方法可用,详见 scala 文档 here。只需在 collection 上调用它即可为您完成转换。

我解决这个问题的方法是使用这样的东西:

return (ListMap<String, IdentityProvider>)new ListMap<String, IdentityProvider>()
            .newBuilder()
            .$plus$eq(new Tuple2<>("provider1", provider1))
            .$plus$eq(new Tuple2<>("provider2", provider2))
            .result();

其中 Tuple2 本质上是 scala.Tuple2。它很丑,但它有效!