Kotlin如何根据映射规则对列表元素应用不同函数并保留原顺序
Kotlin 按映射规则分流处理列表元素的最简实现
直接使用Kotlin标准库提供的集合map扩展函数即可完成需求,该函数遍历元素时会严格保留原列表的元素顺序,无需额外做顺序对齐操作,是代码量最少、性能最优的实现方式。
实现步骤
- 先将
function方法的返回值声明为List<Int>,匹配整数结果列表的返回要求 - 遍历传入列表的每个元素,查询
mapper中对应的标记值,根据标记值选择对应的处理函数执行 - 单次遍历即可生成结果,无需额外的分组、排序、中间集合存储操作
完整可运行代码如下:
class Example(){ val mapper = mapOf<String, Int>( "abc" to 1, "de" to 0, "fedd" to 1, "q" to 1 ) fun function1(x:String)=x.length*2 fun function0(x:String)=x.length*3 fun function(lst: List<String>): List<Int> { return lst.map { element -> when(mapper[element]) { 1 -> function1(element) 0 -> function0(element) else -> error("Mapper缺少元素[$element]对应的处理规则") } } } }
效果验证
传入测试列表listOf("q", "fedd", "de")时,计算逻辑完全匹配要求:
- 元素
q在mapper中对应值为1,执行function1得1*2=2 - 元素
fedd在mapper中对应值为1,执行function1得4*2=8 - 元素
de在mapper中对应值为0,执行function0得2*3=6
最终返回结果为[2, 8, 6],符合预期。
如果业务场景允许mapper中缺失元素配置,可以把取值逻辑换成
mapper.getOrDefault(element, 0),给缺失的规则设置默认走的处理分支,避免抛出异常。
内容的提问来源于stack exchange,提问作者Slavka
相关产品推荐
相关产品推荐

