如何获取Typesafe配置中的列表列表

时间:2017-06-15 06:44:30

标签: java list config typesafe

我有typesafe config列表。基本上我要做的就是提取一张多地图。

myconfig {
  values = [
      [ 'key1', 'value1'],
      [ 'key1', 'value2'],
      [ 'key2', 'value2'],
      [ 'key2', 'value3'],
    ]

解决方法我必须使用:

myconfig {
  values = {
    key1 : [ 'value1' , 'value2' ]
    key2 : [ 'value2' , 'value3' ]
  }
}

有没有一种很好的方法来提取原始列表列表?所有函数都期望一个路径,所以一旦我提取“值”,似乎没有直接访问内部列表的方法。

1 个答案:

答案 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))
    )