有关将字符串列表转换为案例类的问题

时间:2020-03-24 20:59:11

标签: scala

我有两种类型的List [String],List(“ 1234:abcd”)和List(“ 1234:*”),我想将这些字符串列表转换为“ case class FeatureWhitelisting”,“ byName”表示列入白名单的名称(“ abcd”),“ ALL”表示没有名称(“ *”)。

TypeError: expected string or bytes-like object

现在我有了这个,第二个参数应该是什么? ]

sealed trait myWhitelisting

    object myWhitelisting {
      case class ByName(name: String) extends myWhitelisting
      case object All extends myWhitelisting
  }

  case class FeatureWhitelisting(accountId: String, whitelisting: myWhitelisting)

2 个答案:

答案 0 :(得分:2)

您可以使用模式匹配:

List("1234:abcd", "1234:*")
  .map { str =>
    str.split(":") match {
      case Array(accountId, "*") => FeatureWhitelisting(accountId, All)
      case Array(accountId, name) => FeatureWhitelisting(accountId, ByName(name))
    }
  }
  .foreach(println(_))

答案 1 :(得分:1)

我希望我不会在这里留下任何细微差别,但会

list.map{acct => 
      val myVals = acct.split(":").padTo(2, "*")
      FeatureWhitelisting(myVals(0), myVals(1) match {
        case "*" => myWhitelisting.All
        case s => myWhitelisting.ByName(s)
      }
  )
}

工作吗?