36

Scalaを に変換するList[Int]方法はありjava.util.List[java.lang.Integer]ますか?

私はJava(Thrift)とインターフェースしています。

JavaConversionsをサポートしておりList --> java.util.List、の間には暗黙的Int --> java.lang.Integerなものがありますが、手動で変換するには追加のパスが必要であることがわかります。

val y = List(1)     
val z: java.util.List[Integer] = asList(y)  map { (x: Int) => x : java.lang.Integer }
4

6 に答える 6

27

どうやら両方の変換が必要です。ただし、単一の暗黙的な変換でそれらをグループ化できます。

implicit def toIntegerList( lst: List[Int] ) =
  seqAsJavaList( lst.map( i => i:java.lang.Integer ) )

例:

scala> def sizeOf( lst: java.util.List[java.lang.Integer] ) = lst.size

scala> sizeOf( List(1,2,3) )
res5: Int = 3
于 2011-08-09T06:16:46.033 に答える
25

Int の基になる表現は Integer であるため、 に直接キャストできますjava.util.List[java.lang.Integer]O(n)操作といくつかの暗黙的なものを節約できます。

import collection.JavaConversions._

class A {
  def l() = asList(List(1,2)).asInstanceOf[java.util.List[java.lang.Integer]]
}

次に、次のように Java から使用できます。

A a = new A();
java.util.List<Integer> l = a.l();

2.9.0 では、非推奨の警告が表示されることに注意してくださいasList(seqAsJavaList代わりに使用してください)

于 2011-08-09T14:47:13.177 に答える
4

試しましたか:

val javalist = collection.JavaConversions.asJavaList (y)

ここで Int=>Integer または Int=>int の変換が必要かどうかはわかりません。試してみませんか?

更新: 時代は変わりつつあります。今日、そのコードに対して非推奨の警告が表示されます。代わりに使用してください:

import scala.collection.JavaConverters._
val y = List (1)
> y: List[Int] = List(1)

val javalist = (y).asJava
> javalist: java.util.List[Int] = [1]
于 2011-08-09T04:42:01.333 に答える