2017-06-15 43 views
1

我有一個typesafe config列表的列表。基本上我想要做的是提取一個多地圖。如何獲得Typesafe配置列表的列表

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

解決方法我已經使用:

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

是否有提取列表的原始列表的一個很好的方式?所有函數都需要一個路徑,所以一旦我提取'值',似乎沒有直接訪問內部列表的方法。

回答

1

您可以使用Config對象上的getList(String path)獲取ConfigList對象。

的Java:

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

一個ConfigList包含ConfigValue實例。在這種情況下,類型安全人員在內部將該列表表示爲ArrayList,因此在打開ConfigValue對象時必須進行強制轉換。

上面的代碼片段返回List列表。如果你想扁平列表,使用flatMap而不是Map,並返回lambda表中的流。

編輯

這裏的等效斯卡拉:

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