Scala 链式条件映射 - `ifDefined` 方法
scala chained conditional mapping - `ifDefined` method
是否有更简洁的方法来有条件地映射值,例如:
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)
以下内容可能更短
dbQuery.copy(
userName = userName.getOrElse(dbQuery.userName),
address = address.getOrElse(dbQuery.address)
)
是否有更简洁的方法来有条件地映射值,例如:
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)
以下内容可能更短
dbQuery.copy(
userName = userName.getOrElse(dbQuery.userName),
address = address.getOrElse(dbQuery.address)
)