我有typesafe config列表。基本上我要做的就是提取一张多地图。
myconfig {
values = [
[ 'key1', 'value1'],
[ 'key1', 'value2'],
[ 'key2', 'value2'],
[ 'key2', 'value3'],
]
解决方法我必须使用:
myconfig {
values = {
key1 : [ 'value1' , 'value2' ]
key2 : [ 'value2' , 'value3' ]
}
}
有没有一种很好的方法来提取原始列表列表?所有函数都期望一个路径,所以一旦我提取“值”,似乎没有直接访问内部列表的方法。
答案 0 :(得分:2)
您可以使用getList(String path)
对象上的Config
来取回ConfigList
个对象。
<强>爪哇:强>
config.getList("path.to.keys").stream()
.map(configValue -> (ArrayList) configValue.unwrapped())
.collect(Collectors.toList())
ConfigList
包含ConfigValue
个实例。在这种情况下,类型安全人员在内部将列表表示为ArrayList,因此您必须在打开ConfigValue
对象时进行强制转换。
上面的代码段会返回List列表。如果要展平列表,请使用flatMap而不是Map,并在lambda中返回一个流。
修改强>
这是等效的Scala:
import scala.collection.JavaConversions._
val keys: Map[String, String] = config.getList("path.to.keys")
.map(configValue =>
configValue.unwrapped().asInstanceOf[ArrayList[String]]
)
.foldLeft(Map[String, String]())( (map, list) =>
map + (list(0) -> list(1))
)