Kotlin集合操作遇到空值/空白值时如何提前退出并返回null
解决方案
方案1:预构建映射(推荐,多次查找性能更高)
把列表一次性转成NAME到ID的映射表,后续每次查询都是O(1)时间复杂度,代码简洁易读:
// 预构建映射,只需要执行一次 val nameToIdMap = lookupList.associate { it.NAME to it.ID } val testName = "" // 查询逻辑,空字符串直接返回null,非空直接取映射值 val resultID = if (testName.isBlank()) null else nameToIdMap[testName] println(resultID) // 空testName时输出null
方案2:单次查找直接链式调用
如果只需要查询一次,不需要复用查找表,直接用firstOrNull替代原来的filter+map+first组合即可:
val testName = "" val resultID = lookupList.firstOrNull { it.NAME == testName }?.ID println(resultID) // 空testName时输出null
原代码问题说明
你之前的代码崩溃并不是map执行失败,而是filter得到空列表后调用first()会抛出NoSuchElementException。firstOrNull在没有匹配项时会直接返回null,配合安全调用符?.取ID,自然就能实现无匹配时返回null的需求,不需要额外新增空白条目、拼接集合等冗余操作。
内容的提问来源于stack exchange,提问作者lukas.j
相关产品推荐
相关产品推荐

