【问题标题】:Scala Array[String] to Java Collection[String]Scala 数组 [字符串] 到 Java 集合 [字符串]
【发布时间】:2018-05-09 22:34:37
【问题描述】:

我有一个 Scala 字符串数组:

val names:Array[String] = something.map(...)

我需要调用一个接受 Collection 的 Android(java)method

public void addAll (Collection<? extends T> collection)

如何将数组转换为集合?

【问题讨论】:

    标签: scala


    【解决方案1】:

    Java 方法:

    java.util.Arrays.asList(names: _*)
    

    Scala 方法:

    import collection.JavaConversions._
    
    val namesColl: java.util.Collection[String] = names.toSeq
    

    在后一种方法中,names 数组首先转换为 Seq[String],然后位于 JavaConversions 中的隐式转换发现需要 Java 集合,因此它透明地应用了必要的转换。别担心,it is constant in time

    【讨论】:

    • 谢谢,但是“Java 方法”是什么意思?
    • @Steve:我也添加了“Scala 方法” :-)。
    • 完美,谢谢你的解释。有什么理由让您选择其中之一?
    • @DanielC.Sobral:据我所知Arrays.asList 创建了一个包装器,而toSeq 和隐式转换 - 两个。在这两种情况下,都没有复制数组,因此时间复杂度恒定。所以差异很小,但我同意。
    • 拜托,你能解释一下“ _* ”背后的逻辑是什么,它有效,但我不明白。当您键入“名称:”时,我猜您正在使用某种动态集合对名称进行操作,然后您将其返回,对吗?究竟是什么“名称:_ *”返回?如果 Java 数组和 Scala 数组一样,为什么不能直接工作?
    【解决方案2】:

    JavaConversions 现已弃用。 你应该改用JavaConverters

    import collection.JavaConverters.asJavaCollection
    val collection = asJavaCollection(Array("some value"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 2017-07-28
      • 2018-08-10
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多