Вопрос о преобразовании списка строк в case-класс - PullRequest
0 голосов
/ 24 марта 2020

У меня есть два типа List [String], List («1234: abcd») и List («1234: *»), я хочу преобразовать этот список строк в «case class FeatureWhitelisting», «byName» означает белый список имеет имя («abcd»), «ALL» означает отсутствие имени («*»).

sealed trait myWhitelisting

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

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

сейчас у меня есть это, каким должен быть второй параметр? ]

list.map(acct => FeatureWhitelisting(acct.split(":")(0), ))

Ответы [ 3 ]

2 голосов
/ 25 марта 2020

Вы можете использовать сопоставление с образцом:

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 голос
/ 25 марта 2020

Надеюсь, я не пропущу ни одного нюанса здесь, но будет ли

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

делать эту работу?

0 голосов
/ 25 марта 2020

В Scala, насколько я знаю ... объект одноэлементный

Итак, для создания нового экземпляра вашего класса дел ByName вам просто нужно использовать атрибут "new" и использовать импорт.

list.map(acct => FeatureWhitelisting(acct.split(":")(0), new ByName(acct.split(":")(1))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...