【问题标题】:Trying to convert a HashMap into a scala ListMap试图将 HashMap 转换为 scala ListMap
【发布时间】:2015-01-18 14:34:46
【问题描述】:

所以,有一个特定的类,我在某个框架中覆盖它(不相关,但它是 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 scala securesocial


    【解决方案1】:

    在 Scala 文档 here 中详细介绍了 Java 集合中的 asScala 方法。只需在您的收藏中调用它即可为您完成转换。

    【讨论】:

    • 但我认为我无法从 .java 文件中访问任何名为 asScala 的方法。编译器不会检测到这个方法。
    • 啊,好吧,对不起。我的情况发生了逆转;我以为您正在使用 scala 并尝试导入 java 集合。我的错。
    【解决方案2】:

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

    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。它很丑,但它有效!

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      相关资源
      最近更新 更多