Kotlin如何将两次map操作合并为单次并生成多个列表?
合并两次Map操作为单次遍历的解决方案
当然可以,只需要让单次map操作返回包含两种转换结果的容器,再拆分出两个目标列表即可,推荐两种实现方式:
方式一:使用Kotlin内置Pair
利用Pair包装两次转换的结果,再通过unzip()方法直接拆分出两个列表:
val (messages1, messages2) = list.map { spConverter.mapToSppmFromPs(it) to spConverter.mapToSpFromPs(it) }.unzip()
unzip()会自动将Pair组成的列表拆分为两个独立列表,第一个列表对应所有Pair的first元素(即mapToSppmFromPs的结果),第二个对应second元素(即mapToSpFromPs的结果)。
方式二:自定义数据类(更具语义化)
如果觉得Pair的语义不够清晰,可以自定义数据类来封装转换结果,后续拆分也更直观:
// 替换成你实际的类型定义 data class ConvertedResult(val sppmMessage: SppmType, val spMessage: SpType) // 单次遍历生成转换结果列表 val convertedResults = list.map { ConvertedResult( spConverter.mapToSppmFromPs(it), spConverter.mapToSpFromPs(it) ) } // 拆分出两个目标列表 val messages1 = convertedResults.map { it.sppmMessage } val messages2 = convertedResults.map { it.spMessage }
两种方式都只需要遍历原列表一次,相比两次独立map能减少一次遍历开销,尤其适合元素数量较多的场景。
内容的提问来源于stack exchange,提问作者Burak
相关产品推荐
相关产品推荐

