Scala:添加到Scala List

时间:2017-05-07 01:59:22

标签: scala scala-collections

我试图根据条件附加到List [String]但是List显示为空

以下是简单代码:

object Mytester{

  def main(args : Array[String]): Unit = {
    val columnNames = List("t01354", "t03345", "t11858", "t1801566", "t180387685", "t015434")
    //println(columnNames)

    val prim = List[String]()

    for(i <- columnNames) {
      if(i.startsWith("t01"))
        println("Printing i : " + i)
        i :: prim :: Nil
    }

    println(prim)
  }
}

输出

Printing i : t01354
Printing i : t015434
List()

Process finished with exit code 0

2 个答案:

答案 0 :(得分:3)

这一行i :: prim :: Nil创建了一个新的List[]但新的List未保存(即分配给变量),因此它被丢弃。 prim永远不会改变,因为它是val而无法改变。

如果您只想要一个满足特定条件的新List元素,请过滤该列表。

val prim: List[String] = columnNames.filter(_.startsWith("t01"))
// prim: List[String] = List(t01354, t015434)

答案 1 :(得分:1)

1)为什么我无法添加到列表中?

List是不可变的,你必须可变列表(称为ListBuffer

定义

scala> val list = scala.collection.mutable.ListBuffer[String]()
list: scala.collection.mutable.ListBuffer[String] = ListBuffer()

添加元素

scala> list+="prayagupd"
res3: list.type = ListBuffer(prayagupd)

scala> list+="urayagppd"
res4: list.type = ListBuffer(prayagupd, urayagppd)

打印列表

scala> list
res5: scala.collection.mutable.ListBuffer[String] = ListBuffer(prayagupd, urayagppd)

<强> 2。在scala中过滤列表?

此外,在您的情况下,解决问题的最佳方法是使用List#filter,无需使用for循环。

scala> val columnNames = List("t01354", "t03345", "t11858", "t1801566", "t180387685", "t015434")
columnNames: List[String] = List(t01354, t03345, t11858, t1801566, t180387685, t015434)

scala> val columnsStartingWithT01 = columnNames.filter(_.startsWith("t01"))
columnsStartingWithT01: List[String] = List(t01354, t015434)

相关资源

Add element to a list In Scala

filter a List according to multiple contains