【问题标题】:How to convert Java Collection[Int] to Array[Int] in Scala如何在 Scala 中将 Java Collection[Int] 转换为 Array[Int]
【发布时间】:2012-04-15 23:09:00
【问题描述】:

我在 Scala 中有一个 java.util.Treemap[Long, Int]。我需要做的是将 Treemap 中的值转换为 Array[Int]。

我可以从TreeMap 获得Iterator[Int]Collection[Int],但我不确定如何将它们转换为Array[Int]

任何建议将不胜感激。

【问题讨论】:

    标签: java scala treemap


    【解决方案1】:

    t.values.toArray 的问题在于java.util.Collection 已经有一个toArray() 方法,这就是为什么它返回一个Integer[] 看起来像一个Array[AnyRef] 给Scala。如果 Java 没有这样的方法,JavaConversions 中的隐式函数会在构建数组之前将其转换为 Iterable[Int]。因此,您可以显式调用覆盖或给出类型提示:

    import collection.JavaConversions._    
    
    (t.values: Iterable[Int]).toArray
    

    或者

    import collection.JavaConverters._
    
    t.values.asScala.toArray
    

    在我的机器上,对于 1000 个条目的 TreeMap,这些速度是使用 toMap两倍以上 大约 30 倍。

    【讨论】:

    • 另一个技巧,而不是使用类型提示,让它执行到 Iterable[Int] 的隐式转换是显式提供隐式 ClassManifest 参数:t.values.toArray(manifest[Int])
    【解决方案2】:

    我从未使用过 Scala,但在 Java 中,您可以使用 Collection.toArray() 方法来获取 int[]。

    希望对你有所帮助。

    问候。

    【讨论】:

      【解决方案3】:
      import collection.JavaConversions._
      
      val treemap = new java.util.TreeMap[Long, Int]()
      treemap.put(1,1)
      treemap.put(2,2)
      
      treemap.toMap.values.toArray // res0: Array[Int] = Array(1, 2)
      

      这会将TreeMap 转换为scala Map,获取值并将它们转换为Array

      不幸的是,treemap.values.toArray 不能解决问题,因为当您调用 .toArray 时,从 java.util.Collection[Int] 的隐式转换会返回 Array[Object]

      【讨论】:

      • 这给你一个对象数组,而不是整数数组
      猜你喜欢
      • 2016-06-10
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多