实体赋值处理null的问题

项目开发中涉及到一个请求实体,如果为空,就设置为"",这样grpc的服务端,就获取不多这个值,就不作为处理条件了

代码如下:

val cmdbPrice: Cmdb.Price = Cmdb.Price.newBuilder()
			.setSkuId(takeIf { condition.skuId == null }?.let { "" } ?: condition.skuId)
			.setFastoneStrategy(takeIf { condition.fastoneStrategy == null }?.let { "" } ?: condition.fastoneStrategy)
			.setProductLevel(takeIf { condition.productLevel == null }?.let { "" } ?: condition.productLevel)
			.setFastoneRegion(takeIf { condition.fastoneRegion == null }?.let { "" } ?: condition.fastoneRegion)
			.setVendor(takeIf { condition.vendor == null }?.let { "" } ?: condition.vendor)
			.setProductType(takeIf { condition.productType?.name == null }?.let { "" } ?: condition.productType?.name)
			.setSystemPlatform(takeIf { condition.systemPlatform?.name == null }?.let { "" }
				?: condition.systemPlatform?.name)
			.setFastoneModel(takeIf { condition.fastoneModel == null }?.let { "" } ?: condition.fastoneModel)
			.setFastoneFamily(takeIf { condition.fastoneFamily == null }?.let { "" } ?: condition.fastoneFamily)
			.setVendorModel(takeIf { condition.vendorModel == null }?.let { "" } ?: condition.vendorModel)
			.setPayType(takeIf { condition.payType == null }?.let { "" } ?: condition.payType)
			.build()

但是上面的关键代码

takeIf { condition.skuId == null }?.let { "" } ?: condition.skuId

还是有点复杂:

可以修改成:

val cmdbProduct: Cmdb.Product = Cmdb.Product.newBuilder()
			.setSkuId(condition.skuId ?: "")
			.setFastoneStrategy(condition.fastoneStrategy ?: "")
			.setProductLevel(condition.productLevel ?: "")
			.setFastoneRegion(condition.fastoneRegion ?: "")
			.setVendor(condition.vendor ?: "")
			.setProductType(condition.productType?.name ?: "")
			.setSystemPlatform(condition.systemPlatform?.name ?: "")
			.setFastoneModel(condition.fastoneModel ?: "")
			.setFastoneFamily(condition.fastoneFamily ?: "")
			.setVendorModel(condition.vendorModel ?: "")
			.setPayType(condition.payType ?: "")
			.build()

对比takeif和?:


fun main(){

  val user=user(1,"sunyuhua")

  val username= user.takeIf { user.className==null }?.let { "值为空" } ?:user.className

 println("username=$username")

 val username2= user.className?:"值为空"

 println("username2=$username2")

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值