Java 如何在Typesafe配置中获取列表列表
我有一张清单,上面有一张清单。基本上我想做的是提取一个多重映射Java 如何在Typesafe配置中获取列表列表,java,list,config,typesafe,Java,List,Config,Typesafe,我有一张清单,上面有一张清单。基本上我想做的是提取一个多重映射 myconfig { values = [ [ 'key1', 'value1'], [ 'key1', 'value2'], [ 'key2', 'value2'], [ 'key2', 'value3'], ] 我必须使用的解决方案: myconfig { values = { key1 : [ 'value1' , 'value2' ] key2
myconfig {
values = [
[ 'key1', 'value1'],
[ 'key1', 'value2'],
[ 'key2', 'value2'],
[ 'key2', 'value3'],
]
我必须使用的解决方案:
myconfig {
values = {
key1 : [ 'value1' , 'value2' ]
key2 : [ 'value2' , 'value3' ]
}
}
有没有一种提取原始列表的好方法?所有函数都需要一个路径,因此一旦我提取“值”,似乎就没有直接的方法访问内部列表。您可以使用
Config
对象上的getList(字符串路径)
来获取ConfigList
对象
Java:
config.getList("path.to.keys").stream()
.map(configValue -> (ArrayList) configValue.unwrapped())
.collect(Collectors.toList())
ConfigList
包含ConfigValue
实例。在这种情况下,typesafe人员在内部将列表表示为ArrayList,因此您必须在打开ConfigValue
对象时进行转换
上面的代码段返回列表的列表。如果要展平列表,请使用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))
)
发现如果列表中的所有类型都不相同,那么这还不够。例如,假设您定义了一个双列表列表,在您的配置中它是:[[3,4.3],…]第一个数字将被解析为一个整数,当以双精度访问时,您将得到一个ClassCastException。因此,在本例中,我必须更具体地说明:cv.unwrapped().asInstanceOf[util.ArrayList[Number]].asScala.toList.map(u.doubleValue())