условное отображение в цепочке scala - метод ifDefined - PullRequest
4 голосов
/ 16 мая 2019

Есть ли более краткий способ условного отображения значения, как в:

val userName: Option[String] = Some("Bob")
val address: Option[String] = Some("Planet Earth")

val dbQuery = new Query()

val afterUserName = 
  userName.map(u => dbQuery.copy(userName = u))
    .getOrElse(dbQuery)

val modifiedQuery = 
  address.map(a => afterUserName.copy(address = a))
    .getOrElse(afterUserName)

Мне бы хотелось, чтобы метод ifDefined был доступен для всех типов, как в следующем блоке. Это удаляет вызов .getOrElse(...).

dbQuery
  .ifDefined(userName)((d, u) => d.copy(userName = u)
  .ifDefined(address)((d, a) => d.copy(address = a)

1 Ответ

7 голосов
/ 16 мая 2019

Следующее может быть короче

dbQuery.copy(
  userName  = userName.getOrElse(dbQuery.userName),
  address = address.getOrElse(dbQuery.address)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...