0

文字列のリストを入力として持つ (そのうちの 1 つが である可能性がありますNone)。を使用して文字列の配列を返すにはどうすればよいですかImmutable Object

varorを使用すると非常に簡単です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
}

質問val1 :オブジェクトだけを使用したい場合はどうすればよい

注意:返さlist2れる配列にオブジェクトNoneが含まれていない場合None

質問2 : ..and iflist1andlist2wereList[CustomClass]whereCustomClassis

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]`
4

2 に答える 2

1

見るたびに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

またはもう少し簡潔に:

  Array(string) ++ (list1 /: list2)(_++_).map(_.string)
于 2017-01-10T16:39:29.417 に答える