【问题标题】:How to convert Scala collection Seq[(Int, Seq[String])] to Java collection List[(int, List[String])]?如何将 Scala 集合 Seq[(Int, Seq[String])] 转换为 Java 集合 List[(int, List[String])]?
【发布时间】:2018-06-29 00:29:45
【问题描述】:

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

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

但在我的案例中应用它们时遇到了一些麻烦,因为我的数据结构比我在许多示例中看​​到的其他结构要复杂一些。

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

我该怎么做?

【问题讨论】:

    标签: java scala


    【解决方案1】:

    首先使用 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。我没有注意到弃用,很好的收获
    • @AlexSavitsky 顺便说一句,感谢您提供信息,为什么您投了反对票 - 这导致我有可能改变问题并学到一些东西。这是改进答案的非常社区友好的方式;)
    • 支持它。这是积极合作的一个很好的例子。
    • @Fobi note () - 这是一个普通的 Java 函数
    • @Fobi 完整签名为List<Tuple2<Int, List<String>>>
    【解决方案2】:

    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])]
    

    【讨论】:

      猜你喜欢
      • 2016-08-22
      • 1970-01-01
      • 2020-08-12
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多