Kotlin:如何对Set元素执行map操作并保留Set类型输出?
实现Set映射后直接返回Set类型的几种方式
方式一:用mapTo指定目标集合
通过mapTo函数直接将映射结果存入MutableSet,无需额外转换步骤:
val result: Set<String> = setOf("b", "a", "z").mapTo(mutableSetOf()) { "${it}.b" }
这里mapTo会把每个元素映射后的值添加到传入的mutableSetOf()中,最终返回的集合就是Set类型(MutableSet继承自Set)。
方式二:用buildSet构建器构建
Kotlin 1.3及以上版本提供的buildSet可以直接在lambda里完成元素映射和Set构建:
val result: Set<String> = buildSet { setOf("b", "a", "z").forEach { add("${it}.b") } }
这种写法更直观,内部通过add方法将映射后的元素加入新Set,最终返回不可变的Set实例。
方式三:自定义扩展函数简化调用
如果需要频繁使用这类操作,可以给Set扩展一个专属的映射函数:
fun <T, R> Set<T>.mapToSet(transform: (T) -> R): Set<R> { return mapTo(mutableSetOf(), transform) } // 调用示例 val result: Set<String> = setOf("b", "a", "z").mapToSet { "${it}.b" }
这样就能像使用原生map函数一样,直接得到Set类型的映射结果。
内容的提问来源于stack exchange,提问作者pixel
相关产品推荐
相关产品推荐

