In application.conf, we have a map like below.
Note: The key must be a string, can't contain any variables.
If it contains '.', a double quota is needed.
pairs = [
{"c.json": ccc},
{"a.json": aaa},
{"b.json": bbb}
]
import scala.collection.immutable.ListMap
lazy val inputPairs : ListMap[String, String] = {
val list : Iterable[ConfigObject] = stageConfig
.getObjectList("pairs")
.toList
val map = for {
item : ConfigObject = list
entry : Entry[String, ConfigValue] = item.entrySet().toList
col = entry.getKey
func = entry.getValue.unwrapped().toString
} yield (col, func)
map.map(identity)(collection.breakOut)
}
Note: Here we use immutable.ListMap to keep the input order.
Otherwise, Map will return uncertain orders.
In the definition of
map:def map[B, That](f : (A) => B)(implicit bf : CanBuildFrom[Repr, B, That]) : That
The first is your function and the second is an implicit. If you do not provide that implicit, Scala will choose the most specific one available.breakOut can help to skip the intermediary
List and collect the results directly into a Map
The definition of
breakOut:def breakOut[From, T, To](implicit b : CanBuildFrom[Nothing, T, To]) =
new CanBuildFrom[From, T, To] {
def apply(from: From) = b.apply() ; def apply() = b.apply()
}
Reference:
No comments:
Post a Comment