将Scala的Array[String]转换为Java的Collection[String]

13

我有一个包含字符串的Scala数组:

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

我需要调用一个接受 Collection 参数的 Android(java) 方法

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

我该如何将数组转换为集合(Collection)?

2个回答

21

Java方法:

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

Scala方法:

import collection.JavaConversions._

val namesColl: java.util.Collection[String] = names.toSeq

在后一种方法中,names 数组首先被转换为 Seq[String],然后位于 JavaConversions 中的隐式转换会找出所需的 Java 集合,从而透明地应用必要的转换。不用担心,它是常数时间

谢谢,但是你所说的“Java方法”是什么意思? - Steve
@Steve:我也加入了“Scala方法”:-)。 - Tomasz Nurkiewicz
2
据我所知,Arrays.asList 创建一个包装器,而 toSeq 和隐式转换创建两个包装器。在这两种情况下都不会复制数组,因此时间复杂度是恒定的。所以差异微小,但我同意。 - Tomasz Nurkiewicz
谢谢大家。你们的回答总是很有帮助的。完全掌握Scala,特别是Scala-Java交互可能会有些困难。 - Steve
2
请问,能否解释一下“_*”背后的逻辑,它确实能够运行但我不明白。 当你输入“name:”时,我猜你是在操作名称,使用一种动态集合,然后将其返回,对吗? “names: _*”究竟返回什么?如果Java数组和Scala数组是相同的,为什么不能直接使用? - lqbweb
显示剩余2条评论

4

JavaConversions 已经被弃用。 您应该使用 JavaConverters 代替。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接