如何在 Typesafe Config 中获取列表列表

How to get a list of lists in Typesafe Config

我有一个 typesafe config 列表列表。基本上我想做的是提取多图。

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

我必须使用的解决方法:

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

有什么好的方法可以提取列表的原始列表吗?所有函数都需要一条路径,所以一旦我提取 'values' 似乎就没有直接访问内部列表的方法。

您可以在 Config 对象上使用 getList(String path) 来取回 ConfigList 对象。

Java:

config.getList("path.to.keys").stream()
  .map(configValue -> (ArrayList) configValue.unwrapped())
  .collect(Collectors.toList())

一个 ConfigList 包含 ConfigValue 个实例。在这种情况下,类型安全人员在内部将列表表示为 ArrayList,因此您必须在解包 ConfigValue 对象时进行转换。

上面的代码片段 return 是一个列表的列表。如果要展平列表,请使用 flatMap 而不是 Map 和 return 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))
    )