当前位置: 首页 > 知识库问答 >
问题:

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

尉迟德惠
2023-03-14

我知道scala.collection包中有两个极其有用的对象,可以帮助我们实现这个目标:

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

但是在我的案例中应用它们有一些困难,因为我的数据结构比我在许多示例中看到的其他数据结构要复杂一点。

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

我该怎么做呢?

共有2个答案

仲孙信瑞
2023-03-14

JavaConverters自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])]
贺元明
2023-03-14

首先使用 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
 类似资料:
  • 问题内容: 我需要在Java中实现一个返回Scala的方法。 但是我遇到这个错误: 到目前为止,这是我的代码: 但似乎没有提供将其转换为的可能性。 问题答案: 我需要JavaConverters来解决这个问题。

  • 我试图使用以下公式将Future[Seq[(String,String)]转换为Future[Seq[(String)]: 所以 sortedSeq 是 Future[Seq[(String, String)]] 但我一直得到错误: 我做错了什么?

  • 问题内容: 问题 与新HashSet(Collection)等效的Scala)相关,如何将Java集合(例如)转换为Scala集合? 我实际上是在尝试将Java API调用转换为Spring的 (返回a )成Scala不可变。因此,例如: 这似乎有效。欢迎批评! 问题答案: 您的最后一条建议有效,但您也可以避免使用: 请注意,默认情况下,由于提供了此功能。

  • 现有两个名为getDetails(…)的方法 。一个需要至少一个必需参数,另一个需要一个集合(不验证集合的内容/大小)。 问题是集合有时会作为空传递,并且根据我的业务案例,我总是期望至少传递一个值。因此,我需要将该方法设为私有,它接受集合。 我计划将下面的方法作用域设置为private,这样调用者就不会使用零属性调用此方法。 调用方方法之一是将集合对象传递给下面的getDetails, id.ge

  • 我想显示一个图形,为了显示它,我需要整数值。我从我的代码中得到这个 有没有什么方法可以让我以这样一种方式转换集合以获得整数值?我在打印集合c时得到这个

  • 本文向大家介绍Scala将Scala集合转换为Java集合,反之亦然,包括了Scala将Scala集合转换为Java集合,反之亦然的使用技巧和注意事项,需要的朋友参考一下 示例 当您需要将集合传递到Java方法中时: 如果Java代码返回Java集合,则可以通过类似的方式将其转换为Scala集合: 请注意,这些是装饰器,因此它们仅将基础集合包装在Scala或Java集合接口中。因此,通话.asJa