使用Immutable将字符串附加到数组

时间:2017-01-10 15:50:58

标签: scala mutable immutablearray

输入一个String列表(其中一个可能是None)。如何使用Immutable Object返回String数组。

如果我使用varMutable Object,这很简单,例如:

def getArrayString(string: String, list1: List[String], list2: Option[List[String]]): Array[String] = {
  var ret = Array[String]()
  ret = ret :+ string
  if (list1.nonEmpty) {
    for (item <- list1) {
      ret = ret :+ item
    }
  }
  if (list2.isDefined) {
    for (item <- list2.get) {
      ret = ret :+ item
    }
  }
  ret
}

问题1 : 如果我只想使用val对象怎么办?

N.B。:如果list2None,则返回的数组不应包含任何None对象

问题2 : ..如果list1list2List[CustomClass],其中CustomClass

case class CustomClass(string:String)

你会怎么做?

问题3 : ......如果我们用...复杂化方法怎么办?

case class CustomClass1(string1:String)

case class CustomClass2(string2:String)

显然,CustomClass1和CustomClass2可能在其类中有一些其他参数,使它们彼此不同。该方法的签名将是:

def getArrayString( string: String
                , list1: List[CustomClass1]
                , list2: Option[List[CustomClass2]]
              ): Array[String]`

2 个答案:

答案 0 :(得分:1)

您可以使用::将元素添加到列表中,++将连接2个列表:

val ret = (string :: (list1 ++ list2.getOrElse(Nil))).toArray

更新版本:

val ret = (string :: (list1 ++ list2.getOrElse(Nil)).map(_.string)).toArray

答案 1 :(得分:1)

每当我看到SelectedIndexChanged我认为&#34;折叠?&#34;。

Option

更新(根据要求)

def getArrayString( string: String
                  , list1: List[String]
                  , list2: Option[List[String]]
                  ): Array[String] =
  list2.foldLeft(string +: list1)(_++_).toArray

或稍微简洁一点:

case class CustomClass(string:String)
def getArrayString( string: String
                    , list1: List[CustomClass]
                    , list2: Option[List[CustomClass]]
                  ): Array[String] =
  string +: list2.foldLeft(list1)(_++_).map(_.string).toArray