Pan*_*Lee 35 scala scala-java-interop
在Scala中有一种很好的方法可以在List [Int]和java.util.List [java.lang.Integer]之间进行转换吗?
我正在与Java(Thrift)接口.
JavaConversions支持List - > java.util.List,并且Int - > java.lang.Integer之间存在implicits,但是我可以告诉我仍然需要额外的传递来手动进行转换.
val y = List(1)
val z: java.util.List[Integer] = asList(y) map { (x: Int) => x : java.lang.Integer }
Run Code Online (Sandbox Code Playgroud)
par*_*tic 26
显然你需要两次转换.但是,您可以将它们分组到一个隐式转换中:
implicit def toIntegerList( lst: List[Int] ) =
seqAsJavaList( lst.map( i => i:java.lang.Integer ) )
Run Code Online (Sandbox Code Playgroud)
例:
scala> def sizeOf( lst: java.util.List[java.lang.Integer] ) = lst.size
scala> sizeOf( List(1,2,3) )
res5: Int = 3
Run Code Online (Sandbox Code Playgroud)
huy*_*hjl 23
因为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]]
}
Run Code Online (Sandbox Code Playgroud)
然后您可以像这样使用Java:
A a = new A();
java.util.List<Integer> l = a.l();
Run Code Online (Sandbox Code Playgroud)
请注意,在2.9.0上,我收到了弃用警告asList(seqAsJavaList改为使用)
| 归档时间: |
|
| 查看次数: |
14782 次 |
| 最近记录: |