且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何将嵌套的scala集合转换为嵌套的Java集合

更新时间:2023-01-14 15:00:20

scala.collection.JavaConversions 应该被弃用恕我直言。您***通过使用 scala.collection.JavaConverters 来明确转换发生的位置和时间。在你的情况下:

$ p $ import scala.collection.JavaConverters._

type Foo = Int //只需要编译
val scalaMap = Map(1.0 - > Vector(1,2))//作为示例

val javaMap = scalaMap.map {
case (d,v)=> d - > v.toIterable.asJava
} .asJava


I'm having compilation issues between Scala and Java.

My Java code needs a

java.util.Map<Double, java.lang.Iterable<Foo>>

My scala code has a

Map[Double, Vector[Foo]]

I get the compilation error:

error: type mismatch;
found   : scala.collection.immutable.Map[scala.Double,Vector[Foo]
required: java.util.Map[java.lang.Double,java.lang.Iterable[Foo]]

It seems the scala.collection.JavaConversions don't apply to nested collections, even though a Vector can be implictly converted to an Iterable. Short of iterating through the scala collection and doing the conversion by hand, is there something I can do to make the types work?

scala.collection.JavaConversions should be deprecated IMHO. You are better off being explicit about where and when the conversion happens by using scala.collection.JavaConverters. In your case:

import scala.collection.JavaConverters._

type Foo = Int // Just to make it compile
val scalaMap = Map(1.0 -> Vector(1, 2)) // As an example

val javaMap = scalaMap.map { 
  case (d, v) => d -> v.toIterable.asJava
}.asJava