输入一个String列表(其中一个可能是None
)。如何使用Immutable Object
返回String数组。
如果我使用var
或Mutable 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。:如果list2
为None
,则返回的数组不应包含任何None
对象
问题2 :
..如果list1
和list2
是List[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]`
答案 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