尝试将HashMap转换为scala ListMap

时间:2015-01-18 14:34:46

标签: java scala securesocial

所以,有一个特定的类,我在某个框架中重写(不相关,但它是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标签以防万一。

2 个答案:

答案 0 :(得分:1)

scala docs here中详细介绍了Java集合中可用的asScala方法。只需在您的收藏中调用它就可以为您进行转换。

答案 1 :(得分:0)

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

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。这很难看,但它确实有效!