簡體   English   中英

Scala 將 Map[String, Any] 中的 ArrayList 轉換為 Seq

[英]Scala convert ArrayList in Map[String, Any] to Seq

我正在嘗試將.yaml文件讀入我的 Scala 代碼。 假設我有以下yaml文件:

animals: ["dog", "cat"]

我正在嘗試使用以下代碼閱讀它:

val e = yaml.load(os.read("config.yaml")).asInstanceOf[java.util.Map[String, Any]]
val arr = e.getOrDefault("animals", new Java.util.ArrayList[String]()) // arr is Option[Any], but I know it contains java.util.ArrayList<String>
arr.asInstanceOf[Buffer[String]] // ArrayList cannot be cast to Buffer

ArrayList 是 Any 類型,那么如何轉換為 Scala 集合,例如緩沖區? (或 Seq、List...)

SnakeYaml(假設您使用的是什么)不能直接為您提供像 Buffer 這樣的 Scala 集合。

但是您可以要求它提供字符串的 ArrayList,然后將其轉換為您需要的任何內容。

import scala.jdk.CollectionConverters._
val list = arr.asInstanceOf[util.ArrayList[String]].asScala

結果是:

list: scala.collection.mutable.Buffer[String] = Buffer(dog, cat)

您擁有的另一個選擇是定義您的配置模型,例如:

class Sample {
  @BeanProperty var animals = new java.util.ArrayList[String]()
}

下面將創建一個Sample實例:

val input = new StringReader("animals: [\"dog\", \"cat\"]")
val yaml = new Yaml(new Constructor(classOf[Sample]))
val sample = yaml.load(input).asInstanceOf[Sample]

然后,使用 Scala 2.13 中的CollectionConverters或 Scala 2.12 或JavaConverters中的JavaConverters ,將animals轉換為 Scala 結構:

val buffer = sample.getAnimals.asScala

代碼在Scastie運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM