将从 unwrapped() 获得的 java ArrayList 转换为 Scala 列表
Converting from java ArrayList obtained from unwrapped() to Scala list
语言:SCALA
我的属性文件中有一个 map
定义为:
dummy {
"Key1" : ["value1","value2", "value3"]
"Key2" : ["Hi1", "Hi2"]
"Key3" : ["Bye1"]
}
现在,我可以找到上面 map
的 entryset
并将其填入 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 集合的解决方案,但其中 none 似乎在 unwrapped()
return 和 Object
之后起作用实例,我必须先施放它。
我试过玩:
asScalaBuffer
(https://alvinalexander.com/scala/how-to-go-from-java-collections-convert-in-scala-interact)
val javaToScalaList = entry.getValue.unwrapped().asInstanceOf[List[String]]
.asScala.toList
对不起,如果太天真了。我是 scala 的新手。
你可以这样做:
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))
编辑:(添加正则表达式替换以用点修复路径)
要处理键中的点,您需要使用 "
字符引用它们。我已经用执行此操作的正则表达式更新了答案。
语言:SCALA
我的属性文件中有一个 map
定义为:
dummy {
"Key1" : ["value1","value2", "value3"]
"Key2" : ["Hi1", "Hi2"]
"Key3" : ["Bye1"]
}
现在,我可以找到上面 map
的 entryset
并将其填入 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 集合的解决方案,但其中 none 似乎在 unwrapped()
return 和 Object
之后起作用实例,我必须先施放它。
我试过玩:
asScalaBuffer
(https://alvinalexander.com/scala/how-to-go-from-java-collections-convert-in-scala-interact)val javaToScalaList = entry.getValue.unwrapped().asInstanceOf[List[String]]
.asScala.toList
对不起,如果太天真了。我是 scala 的新手。
你可以这样做:
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))
编辑:(添加正则表达式替换以用点修复路径)
要处理键中的点,您需要使用 "
字符引用它们。我已经用执行此操作的正则表达式更新了答案。