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

3
我知道scala.collection包中有两个非常有用的对象,它们可以帮助我们实现这个目标:
  • JavaConverters(如果我想明确告诉转换器我要转换的内容)
  • JavaConversions(如果我不想控制转换而让编译器为我自动工作)
但是我在应用它们到我的情况时遇到了一些麻烦,因为我的数据结构比其他许多示例中看到的那些更加复杂。
我在Scala代码中,想让我的函数返回一个Java集合。我想将Scala Seq[(Int, Seq[String])]转换为Java集合List[(int, List[String])]。我该怎么做?
2个回答

7

首先使用map将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

@AlexSavitsky 好的,我添加了更新的API。我没有注意到已经过时了,你发现得真好。 - T. Gawęda
1
@AlexSavitsky 顺便说一下,感谢您提供有关为什么您投反对票的信息 - 这使我有可能改变问题并学到了一些东西。这是非常有利于社区改进答案的方式 ;) - T. Gawęda
1
点赞回来了。这是积极合作的绝佳例子。 - Alex Savitsky
1
@Fobi 注意 () - 这是一个普通的Java函数。 - T. Gawęda
1
@Fobi 完整的签名是 List<Tuple2<Int, List<String>>> - T. Gawęda
显示剩余7条评论

3

JavaConversions自Scala 2.12.0版本起已被弃用。请使用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])]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接