Преобразование массива в scala класса case

#scala

Вопрос:

Я разделяю строку, чтобы получить массив, а затем создаю из нее объект класса case. Это мой код.

 case class Opp
  (
    a: String,
    b: String,
    c: String,
    d: String,
    e: String,
    f: String,
    g: String,
    h: String
  )
  def getStruct(fff: String): Opp = {

    val xxx = fff.split("-")
    var opp : Opp = null
    if xxx.length < 8{
      opp = Opp(xxx[0], xxx[1], xxx[2], xxx[3], xxx[4], xxx[5], xxx[6], null))
    }else{
      opp = Opp(xxx[0], xxx[1], xxx[2], xxx[3], xxx[4], xxx[5], xxx[6], xxx[7]))
    }

  }
 

Это работает, но есть ли лучший способ сделать это?

Комментарии:

1. Я бы превратил Array в a List и использовал сопоставление с образцом , а также использовал Option null для дополнительных значений.

Ответ №1:

 case class Opp(a: String
              ,b: String
              ,c: String
              ,d: String
              ,e: String
              ,f: String
              ,g: String
              ,h: String)
object Opp {
  def apply(ss: Seq[String]): Opp = {
    val itr = ss.iterator    Iterator.continually("") //avoid null if you can
    new Opp(itr.next(), itr.next(), itr.next()
           ,itr.next(), itr.next(), itr.next()
           ,itr.next(), itr.next())
  }
}
 

использование:

 val myopp = Opp("a-b-c-d-e".split("-"))
 

Комментарии:

1. Нет необходимости использовать new