You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向空Seq[String]追加元素未实现预期合并效果的技术问询

问题分析与解决方案

你的代码核心问题有两个:

  • 每次循环用enrichmentColumnsList= cond直接覆盖原有集合,而非追加元素,最终只保留最后一次的结果。
  • 内层for (i <- 0 to columnMappingConf.size)完全多余,它会循环columnMappingConf.size + 1次,重复赋值同一个cond,导致控制台多次打印相同内容。

方案1:可变集合适配原有写法

如果想沿用可变变量的思路,改用ListBuffer存储元素,通过批量追加替代覆盖:

import scala.collection.mutable.ListBuffer

var enrichmentColumnsList: ListBuffer[String] = ListBuffer.empty
datasetEnricherConf.map(_.columnMappingsConf).foreach { columnMappingConf =>
  val cond = columnMappingConf.map(_.destColumnName)
  println(s"cond:$cond")
  enrichmentColumnsList ++= cond // 批量追加元素,而非覆盖
}

// 可选:转成不可变Seq
val finalColumns: Seq[String] = enrichmentColumnsList.toSeq
println(s"enrichmentColumnsList:$finalColumns")

方案2:纯函数式实现(Scala推荐风格)

Scala更推荐使用不可变集合与纯函数操作,避免var,通过flatMap直接收集所有目标元素:

val enrichmentColumnsList: Seq[String] = datasetEnricherConf
  .map(_.columnMappingsConf)
  .flatMap { columnMappingConf =>
    val cond = columnMappingConf.map(_.destColumnName)
    println(s"cond:$cond")
    cond
  }

println(s"enrichmentColumnsList:$enrichmentColumnsList")

执行上述任一方案后,都会得到你预期的合并结果:

enrichmentColumnsList:List(NODE, NODE_temp, NETWORK, SITETYPE, STATEORPROVINCE, DISTRICT, CLUSTER, REGION)

内容的提问来源于stack exchange,提问作者Vikrant Singh Rana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:31:11