You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Scala中将java.util.ArrayList转换为Seq[Seq[String]]?

将Java ArrayList嵌套集合转换为Scala Seq[Seq[String]]的方法

嘿,这个转换其实挺简单的,Scala对Java集合的互操作支持做得很到位,给你两种适配不同Scala版本的实现方式:

方法一:Scala 2.13+ 推荐用法

从Scala 2.13开始,官方推荐使用scala.jdk.CollectionConverters来处理Java和Scala集合的转换,代码如下:

import scala.jdk.CollectionConverters._

// 假设你的Java ArrayList已经初始化并添加了元素
val array: java.util.ArrayList[java.util.ArrayList[String]] = new java.util.ArrayList[java.util.ArrayList[String]]
// ... 添加元素的代码 ...

val scalaSeq: Seq[Seq[String]] = array.asScala.map { innerList =>
  innerList.asScala.toSeq
}.toSeq

代码解释:

  • array.asScala:把外层的Java ArrayList转换为Scala的可变Buffer(它是Seq的子类型)
  • 内层的innerList.asScala.toSeq:把每个Java内部列表转换为Scala的不可变Seq
  • 最后调用toSeq:把外层的可变Buffer转换为不可变的Seq,符合大多数场景下的不可变偏好

方法二:Scala 2.12及更早版本用法

在Scala 2.12及之前的版本,我们通常使用scala.collection.JavaConverters,代码逻辑和上面一致,只是导入的包不同:

import scala.collection.JavaConverters._

val array: java.util.ArrayList[java.util.ArrayList[String]] = new java.util.ArrayList[java.util.ArrayList[String]]
// ... 添加元素的代码 ...

val scalaSeq: Seq[Seq[String]] = array.asScala.map(_.asScala.toSeq).toSeq

额外提示

如果你的业务场景允许使用可变集合,其实可以省略最后的toSeq,直接使用asScala返回的Buffer(因为Buffer继承自mutable.Seq),但一般更推荐使用不可变的Seq来避免意外的副作用哦。

内容的提问来源于stack exchange,提问作者ps0604

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:22:32