Search code examples
scala

appending to empty Seq[String]


I was trying to append a Seq[String] to existing an empty Seq[String]

var enrichmentColumnsList: Seq[String] = Seq.empty
datasetEnricherConf.map(u => u.columnMappingsConf).foreach {
  columnMappingConf =>
    for (i <- 0 to columnMappingConf.size) {
      var cond = columnMappingConf.map(_.destColumnName)
      println(s"cond:$cond")
      enrichmentColumnsList= cond
    }
}


println(s"enrichmentColumnsList:$enrichmentColumnsList")

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

It initializes it with the last occurrence of the list.

I was expecting something like below:

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

Solution

  • What you want can be achieved in a more functional way (that Scala encourages) using the following code:

    val enrichmentColumnsList: Seq[String] =
      datasetEnricherConf
        // "flatMap" because columnMappingsConf is itself a Sequence/Iterable
        .flatMap(_.columnMappingsConf) 
        // As opposed to here where we can just use "map"
        .map(_.destColumnName)
    

    Notice especially that we're not using mutable data (var) and no loop.