scala将字符串列表转换为键/值映射

nav*_*ore 4 scala scala-collections

我有一个从外部系统导入的单个有序字符串数组,形式如下:

val l = List("key1", "val1", "key2", "val2", etc...)
Run Code Online (Sandbox Code Playgroud)

什么是scala方式将其转换为一个地图,我可以迭代键并获得相关的val?

谢谢

End*_*Neu 8

我的回答类似于丹尼尔,但我会用collect而不是map:

l.grouped(2).collect { case List(k, v) => k -> v }.toMap
Run Code Online (Sandbox Code Playgroud)

如果您有一个包含不匹配键的列表,则不会抛出异常:

scala>   val l = List("key1", "val1", "key2", "val2", "key3")
l: List[String] = List(key1, val1, key2, val2, key3)

scala> l.grouped(2).collect { case List(k, v) => k -> v }.toMap
res22: scala.collection.immutable.Map[String,String] = Map(key1 -> val1, key2 -> val2)

scala> l.grouped(2).map { case List(k, v) => k -> v }.toMap
scala.MatchError: List(key3) (of class scala.collection.immutable.$colon$colon)
Run Code Online (Sandbox Code Playgroud)

一些上下文,grouped返回List[List[String]]每个内部列表有两个元素的位置:

scala> l.grouped(2).toList // the toList is to force the iterator to evaluate.
res26: List[List[String]] = List(List(key1, val1), List(key2, val2))
Run Code Online (Sandbox Code Playgroud)

然后与collect你在内部列表上匹配并创建一个元组,最后toMap将列表转换为a Map.