[英]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.