如何将List[String]按相邻索引两两配对转换为Map[String,String]
实现方案
直接使用Scala集合自带的grouped方法即可快速实现需求,这是最简洁且可读性最高的写法:
// 示例输入 val inputList = List("asd","fgh","qwe","tyu") // 转换逻辑 val resultMap = inputList .grouped(2) // 按每2个元素为一组拆分列表 .collect { case List(key, value) => key -> value } // 匹配每组的两个元素,转为键值对,自动忽略落单元素 .toMap // 转为Map结构
运行后输出结果和示例完全一致:Map("asd" -> "fgh", "qwe" -> "tyu")
边界情况处理
如果业务场景要求列表长度必须为偶数,不允许存在落单元素,可以先加合法性校验:
if (inputList.size % 2 != 0) { throw new IllegalArgumentException("输入列表长度必须为偶数,无法两两配对") } else { inputList.grouped(2).map { case List(k, v) => k -> v }.toMap }
其他可选实现
如果不想用grouped方法,也可以通过索引分组的方式实现,效果完全一致:
val resultMap = inputList .zipWithIndex .groupBy(_._2 / 2) .values .collect { case Seq((k, _), (v, _)) => k -> v } .toMap
内容的提问来源于stack exchange,提问作者Hola Hola
相关产品推荐
相关产品推荐

