从unwrapped()获得的java ArrayList转换为Scala列表

时间:2018-10-12 20:35:56

标签: java scala configuration config configuration-files

Lang:SCALA
我在属性文件中将一个map定义为:

dummy {
  "Key1" : ["value1","value2", "value3"]
  "Key2" : ["Hi1", "Hi2"]
  "Key3" : ["Bye1"]
}

现在,我可以找到entryset以上的map并将其填写在scala的map中,如下所示:

var configTrialMap: Config = config.getConfig("dummy")
val resMap = mutable.Map[String, List[String]]()
for (entry <- configTrialMap.entrySet.asScala) {
    resMap.put(entry.getKey, entry.getValue.unwrapped().toString.split(",").map(_.trim).toList)
}

但是问题是这段代码看起来笨拙,我必须放置一些正则表达式以用空白字符替换所有[, ]

我已经看到了一些将java集合转换为scala的解决方案,但是自unwrapped()返回一个Object实例以来,它们似乎都无法正常工作。

我尝试过玩:

  1. asScalaBufferhttps://alvinalexander.com/scala/how-to-go-from-java-collections-convert-in-scala-interact

  2. val javaToScalaList = entry.getValue.unwrapped().asInstanceOf[List[String]]

  3. .asScala.toList

抱歉,如果它太幼稚。我是Scala的新手。

1 个答案:

答案 0 :(得分:1)

您可以这样做:

  import com.typesafe.config.ConfigFactory
  import scala.collection.JavaConverters._
  //load config into configTrialMap

configTrialMap.getObject("dummy")
  .keySet().asScala
  .map(k => {
    val k2 = k.replaceAll("\\.", "\".\"")  //quote all the dots in key
    ("dummy."+k2, configTrialMap.getStringList(s"dummy." + k2).asScala.toList)
  })
  .toMap

结果为:

scala.collection.immutable.Map[String,List[String]] = Map(dummy.U"."S"." Sample -> List(Bye1), dummy.Key2 -> List(Hi1, Hi2), dummy.Key1 -> List(value1, value2, value3))

编辑 :(添加正则表达式替换以修复带点的路径)

要处理键中的点,您需要使用"字符对其进行引用。我已经用执行此操作的正则表达式更新了答案。