如何将Scala集合Seq [(Int,Seq [String])]转换为Java集合List [(int,List [String])]?

时间:2018-01-19 17:36:56

标签: java scala

我知道scala.collection包中有两个非常有用的对象,它们将帮助我们实现这个目标:

  • JavaConverters(如果我想要明确并准确说出我要转换的内容)
  • JavaConversions(如果我不想进行共同控制转换而且让 编译器为我做隐式工作)

但我在我的案例中应用它们有些麻烦,因为我的数据结构比我在很多例子中看到的其他数据结构稍微复杂一些。

我在scala代码中,我希望我的scala函数返回Java集合。所以我想将Scala Seq [(Int,Seq [String])]转换为Java集合List [(int,List [String])]。

我该怎么做?

2 个答案:

答案 0 :(得分:7)

在第一张地图Seq[(Int, Seq[String])]Seq[(Int, List[String])]使用地图,然后再将相同的功能用于主集合

import scala.collection.JavaConversions
val seq : Seq[(Int, Seq[String])] = some code
val seqOfLists = seq.map(s => (s._1, JavaConversions.seqAsJavaList(s._2)))
val listOfLists = JavaConversions.seqAsJavaList(seqOfLists)

或更新的API:

import scala.collection.JavaConverters._
val seq : Seq[(Int, Seq[String])] = some code
val seqOfLists = seq.map(s => (s._1, s._2.asJava))
val listOfLists = seqOfLists.asJava

答案 1 :(得分:3)

自Scala 2.12.0以来,

JavaConversions已弃用。请改用JavaConverters

import scala.collection.JavaConverters._

val seq: Seq[(Int, Seq[String])] = ???
val javaList = seq.map(x => (x._1, x._2.asJava)).asJava
// java.util.List[(Int, java.util.List[String])]