能否在单个Lambda表达式中完成列表过滤、查找替换操作?
解决方案
你可以通过在链式调用中加入let函数,在不中断流程的前提下完成判断和替换操作,既保留对映射后列表的访问,又能实现需求。
修改后的代码示例
假设你要检查的特定值为targetValue,替换用的列表为replacementList,代码可以写成:
val primaryUsers = usersList .filter { it.primaryUserGroups.any { userId -> userIds.contains(userId) } } .map { it.username } .let { mappedList -> if (mappedList.contains(targetValue)) { replacementList } else { mappedList } }
逻辑说明
- 前两步保持原有逻辑:过滤符合条件的用户,映射为用户名列表
let函数会将映射后的列表作为参数传入内部lambda,此时你可以完整访问这个列表- 在
let的lambda中判断列表是否包含目标值,根据结果返回替换列表或原列表,最终赋值给primaryUsers
如果你的需求是替换列表中的特定元素(而非整个列表),可以在map步骤中直接处理:
val primaryUsers = usersList .filter { it.primaryUserGroups.any { userId -> userIds.contains(userId) } } .map { if (it.username == targetValue) replacementValue else it.username }
内容的提问来源于stack exchange,提问作者glitterShimmer
相关产品推荐
相关产品推荐

