java - 如何将嵌套的 Scala 集合转换为嵌套的 Java 集合

标签 java scala generics scala-collections

我在 Scala 和 Java 之间遇到编译问题。

我的 Java 代码需要一个

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

我的scala代码有一个

Map[Double, Vector[Foo]]

我得到编译错误:

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

似乎 scala.collection.JavaConversions 不适用于嵌套集合,即使 Vector 可以隐式转换为 Iterable。除了遍历 Scala 集合并手动进行转换之外,我还能做些什么来使这些类型起作用?

最佳答案

scala.collection.JavaConversions 应该被弃用恕我直言。您最好使用 scala.collection.JavaConverters 明确说明转换发生的时间和地点。在你的情况下:

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

关于java - 如何将嵌套的 Scala 集合转换为嵌套的 Java 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13981983/

相关文章:

Java 泛型 Lambda 编译错误

java - 无法从 ArrayList<Object> 转换为 ArrayList<MyObject>

java - JBOSS EAP6.2 说 java.lang.ClassNotFoundException 但 lib 文件夹中有该类

java - 了解 java Stream.limit() 操作

java - readLine 用于读取多行而不循环?

scala - 如何在 Scalding 中定义源字段

c# - 如何将此示例 foreach 转换为 lambda 表达式?

java - @ManyToOne 的 JPA 规范 CriteriaBuilder

scala - 如何将一段中文文本分割成单个字符?

scala - Akka Streams - 根据某些谓词拆分传入源数据