8 ответов:
список Scala и список Java-это два разных зверя, потому что первый неизменен, а второй изменчив. Итак, чтобы перейти от одного к другому, вам сначала нужно преобразовать список Scala в изменяемую коллекцию.
На Scala 2.7:
import scala.collection.jcl.Conversions.unconvertList import scala.collection.jcl.ArrayList unconvertList(new ArrayList ++ List(1,2,3))начиная со Scala 2.8:
,import scala.collection.JavaConversions._ import scala.collection.mutable.ListBuffer asList(ListBuffer(List(1,2,3): _*)) val x: java.util.List[Int] = ListBuffer(List(1,2,3): _*)asListв этом примере не требуется, если ожидаемый тип является JavaList, поскольку преобразование неявно, как показано в последней строке.
не знаю, почему это не было упомянуто раньше, но я думаю, что самый интуитивный способ-вызвать
asJavaспособ декоратор JavaConverters непосредственно в списке Scala:scala> val scalaList = List(1,2,3) scalaList: List[Int] = List(1, 2, 3) scala> import scala.collection.JavaConverters._ import scala.collection.JavaConverters._ scala> scalaList.asJava res11: java.util.List[Int] = [1, 2, 3]
чтобы подвести итоги предыдущих ответов
предполагая, что мы имеем следующее
List:scala> val scalaList = List(1,2,3) scalaList: List[Int] = List(1, 2, 3)
если вы хотите быть явно и точно что вы хотите конвертировать:
scala> import scala.collection.JavaConverters._ import scala.collection.JavaConverters._ scala> scalaList.asJava res11: java.util.List[Int] = [1, 2, 3]
если вы не хочу Co управления преобразованиями и пусть компилятор делать подразумевается работа для вас:
scala> import scala.collection.JavaConversions._ import scala.collection.JavaConversions._ scala> val javaList: java.util.List[Int] = scalaList javaList: java.util.List[Int] = [1, 2, 3]это зависит от вас, как вы хотите контролировать свой код.
довольно старые вопросы, хотя я отвечу, но большинство предложений устарели.
import scala.collection.JavaConversions.seqAsJavaList val myList = List("a", "b", "c") val myListAsJavaList = seqAsJavaList[String](myList)
обновление
С scala 2.9.2:
import scala.collection.JavaConversions._ import scala.collection.mutable.ListBuffer val x: java.util.List[Int] = ListBuffer( List( 1, 2, 3 ): _* )результат
[1, 2, 3]
для одиночных вызовов, делать это вручную может быть самое простое решение:
val slist = List (1, 2, 3, 4) val jl = new java.util.ArrayList [Integer] (slist.size) slist.foreach (jl.add (_))Я не измерял производительность.
просто делать, как предложено выше, создает неизменяемый список даже на стороне Java. Единственное рабочее решение, которое я нашел, это:
def toJList[T](l:List[T]):util.List[T] = { val a = new util.ArrayList[T] l.map(a.add(_)) a }
Начиная С Scala 2.12.0 JavaConversions был осужден.
поэтому самым простым решением для меня было:
java.util.Arrays.asList("a","b","c")
Comments