You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何让List字段返回空列表[]?

问题解决:构建API请求体时返回空列表的正确写法

你当前的问题出在updateDeviceList的构建逻辑上:用List(dbInfo.equipmentList.size) { ... }生成的列表会包含所有循环产生的元素,不符合条件时返回的Unit会混入列表,后续的强制类型转换不仅不安全,也无法得到你想要的空列表。

解决方案

直接使用mapNotNull遍历设备列表,只保留符合条件的ApiUpdateDeviceList实例,不符合条件的返回null,mapNotNull会自动过滤掉所有null值,最终自然得到空列表(当没有符合条件的元素时)。

修改后的代码片段

将updateDeviceList的构建代码替换为:

updateDeviceList = dbInfo.equipmentList.mapNotNull { equipmentItem ->
    val dbEquipmentInfo = equipmentItem.sSEquipmentDbInfo
    Log.d("UpdatingSiteSurvey", "UpdateDeviceListDB $dbEquipmentInfo")
    val secondaryDeviceCheckedStatus = dbEquipmentInfo.secondaryDeviceCheckedStatus
    val isDuplicateDeviceInUpdatePhase = dbEquipmentInfo.isDeviceUpdateMode
    
    if (secondaryDeviceCheckedStatus == CHECKED_YES && isDuplicateDeviceInUpdatePhase) {
        ApiUpdateDeviceList(
            deviceEquipmentId = dbEquipmentInfo.deviceEquipmentId,
            secondaryDeviceId = dbEquipmentInfo.secondaryDeviceId,
            deviceInstanceId = dbEquipmentInfo.deviceInstanceId.toString(),
            deviceSerialNumber = dbEquipmentInfo.deviceSerialNumber,
            devicePartNumber = dbEquipmentInfo.devicePartNumber,
            deviceManufacturerName = dbEquipmentInfo.deviceManufacturer,
            deviceInstallationDate = DateUtil.dateToStringUTCSiteSurvey(dbEquipmentInfo.deviceInstallationDate),
            deviceLocation = dbEquipmentInfo.locationInfo,
            deviceTechnicianNotes = dbEquipmentInfo.deviceTechnicianNotes
        ).also {
            Log.d(TAG, "updateDeviceListRequestBodyAPI $it")
        }
    } else {
        // 不符合条件时返回null,mapNotNull会自动过滤
        null
    }
},

额外说明

  • mapNotNull是Kotlin标准库中专门处理这种“只保留有效元素”场景的函数,比手动构建列表再过滤更简洁高效。
  • 原代码中newDeviceList的写法也存在类似问题(返回非ApiNewDeviceList类型的元素),建议同样改用mapNotNull来统一逻辑,避免类型转换错误。

内容的提问来源于stack exchange,提问作者OEThe11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:25:16