scala - 将字符串的scala Seq转换为键值对
问题描述
我有一个像 [1,2] 这样的数组
我创建了一个将执行特定操作的 udf。下面是 UDF
def addOne(elements: Seq[String]) = elements.map(element => ("id",s"a-$element","v","In"))
所以输出p就像
[["id","a-1","v","In"],["id","a-2","v","In"]]
我想把它转换成键值对
最终的 o/p 应该类似于
{
id:"a-1",
v:"In"
},
{
id:"a-2",
v:"In"
}
解决方案
您可以尝试以下方法
如果元素的数量不是偶数,我已经添加了 if 条件来处理这种方法将为您提供可变映射
val seq = Seq(1,"a",2,"b")
val itr = seq.iterator
val newMap: scala.collection.mutable.Map[Any,Any] = scala.collection.mutable.Map()
if(seq.size % 2 == 0)
while(itr.hasNext) {
newMap += (itr.next->itr.next)
}
println(newMap)
在不可变 Map 中获取结果的其他选项
val seq = Seq(1,"a",2,"b")
def listToMap[T](xs: Seq[T]) =
xs.grouped(2)
.map{case List(a, b) => (a,b)}
.toMap
val newMap = listToMap(seq)
println(newMap)
推荐阅读
- tensorflow - Tensorflow 2.0 中 TFRecordCompressionType.GZIP 接收错误
- android - Android Kotlin 回收站视图中点击事件的新意图
- flutter - 列表在末尾重复/类似轮播
- java - 如何在 Eclipse 中从 github 运行应用程序
- eclipse - Eclipse RCP 动态 MenuContribution 使用 CoreExpression 隐藏和取消隐藏
- python - 从 href python '#' 中删除元素
- javascript - 切片数组并从 RTL / LTR 转换
- java - 解释为什么这可以找到两个等于小数点后三位的数字
- java - 如何在片段中添加另一个屏幕?
- php - 有没有办法在 MySQLi 中获取多行