💡 导读:Kotlin的集合框架是函数式编程的完美体现,从不可变集合到序列操作,从高阶函数到自定义操作符,本文将带你掌握Kotlin集合的强大功能!
📋 目录
📚 集合基础
集合类型
fun main() {
// List - 有序集合
val list = listOf(1, 2, 3, 4, 5)
val mutableList = mutableListOf(1, 2, 3)
// Set - 无序集合,无重复元素
val set = setOf("apple", "banana", "cherry")
val mutableSet = mutableSetOf("apple", "banana")
// Map - 键值对集合
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
val mutableMap = mutableMapOf("a" to 1, "b" to 2)
println("List: $list")
println("Set: $set")
println("Map: $map")
}
🔒 不可变集合
不可变集合的优势
fun main() {
// 不可变集合 - 推荐使用
val immutableList = listOf(1, 2, 3, 4, 5)
val immutableSet = setOf("a", "b", "c")
val immutableMap = mapOf("x" to 1, "y" to 2)
// 不可变集合的操作返回新集合
val newList = immutableList + 6 // 添加元素
val filteredList = immutableList.filter { it > 3 } // 过滤
val mappedList = immutableList.map { it * 2 } // 映射
println("原列表: $immutableList")
println("新列表: $newList")
println("过滤后: $filteredList")
println("映射后: $mappedList")
}
🎭 函数式操作
基础操作
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
// filter - 过滤
val evens = numbers.filter { it % 2 == 0 }
println("偶数: $evens") // [2, 4, 6, 8, 10]
// map - 映射
val doubled = numbers.map { it * 2 }
println("翻倍: $doubled") // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
// reduce - 累积
val sum = numbers.reduce { acc, num -> acc + num }
println("总和: $sum") // 55
// fold - 带初始值的累积
val product = numbers.fold(1) { acc, num -> acc * num }
println("乘积: $product") // 3628800
}
⚡ 序列操作
序列基础
fun main() {
val numbers = (1..1000000).toList()
// 普通操作(会创建中间集合)
val result1 = numbers
.filter { it % 2 == 0 }
.map { it * it }
.take(5)
// 序列操作(惰性求值,更高效)
val result2 = numbers.asSequence()
.filter { it % 2 == 0 }
.map { it * it }
.take(5)
.toList()
println("结果: $result2") // [4, 16, 36, 64, 100]
}
🎪 自定义操作
扩展函数
// 为List添加自定义操作
fun <T> List<T>.customFilter(predicate: (T) -> Boolean): List<T> {
val result = mutableListOf<T>()
for (item in this) {
if (predicate(item)) {
result.add(item)
}
}
return result
}
fun <T, R> List<T>.customMap(transform: (T) -> R): List<R> {
val result = mutableListOf<R>()
for (item in this) {
result.add(transform(item))
}
return result
}
// 使用自定义操作
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val filtered = numbers.customFilter { it % 2 == 0 }
val mapped = numbers.customMap { it * 2 }
println("自定义过滤: $filtered")
println("自定义映射: $mapped")
}
🎯 实战应用
构建器模式
class UserBuilder {
private var name: String = ""
private var age: Int = 0
fun name(name: String) = apply { this.name = name }
fun age(age: Int) = apply { this.age = age }
fun build() = User(name, age)
}
data class User(val name: String, val age: Int)
fun main() {
val user = UserBuilder()
.name("张三")
.age(25)
.build()
println(user)
}
状态机
sealed class OrderState {
object Created : OrderState()
object Paid : OrderState()
object Shipped : OrderState()
object Delivered : OrderState()
}
class Order {
private var state: OrderState = OrderState.Created
fun pay() {
state = when (state) {
is OrderState.Created -> OrderState.Paid
else -> throw IllegalStateException("不能支付")
}
}
fun ship() {
state = when (state) {
is OrderState.Paid -> OrderState.Shipped
else -> throw IllegalStateException("不能发货")
}
}
}
📊 最佳实践
设计原则
// 单一职责
class UserService {
fun createUser(user: User) { /* 创建用户 */ }
fun updateUser(user: User) { /* 更新用户 */ }
}
class UserValidator {
fun validateUser(user: User): Boolean { /* 验证用户 */ }
}
// 使用对象声明
object Constants {
const val API_URL = "https://api.example.com"
const val TIMEOUT = 30000
}
🎯 总结
核心要点
- 类基础 - 主构造函数、继承、抽象类
- 数据类 - 自动生成方法、解构声明
- 对象声明 - 单例、伴生对象
- 密封类 - 受限类层次结构
- 委托属性 - 懒加载、可观察、否决
进阶方向
- 泛型 - 类型参数化
- 反射 - 运行时类型信息
- DSL构建 - 领域特定语言
🌟 下期预告:Kotlin泛型详解,类型安全的艺术!
📝 作者寄语:Kotlin的面向对象编程既熟悉又现代,让我们一起创造更多可能!
点赞、收藏、关注,支持创作! 🚀