我有两种类型的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)
答案 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)
}
)
}
工作吗?