Kotlin集合与函数式操作:数据处理的艺术

💡 导读: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
}

🎯 总结

核心要点

  1. 类基础 - 主构造函数、继承、抽象类
  2. 数据类 - 自动生成方法、解构声明
  3. 对象声明 - 单例、伴生对象
  4. 密封类 - 受限类层次结构
  5. 委托属性 - 懒加载、可观察、否决

进阶方向

  • 泛型 - 类型参数化
  • 反射 - 运行时类型信息
  • DSL构建 - 领域特定语言

🌟 下期预告:Kotlin泛型详解,类型安全的艺术!


📝 作者寄语:Kotlin的面向对象编程既熟悉又现代,让我们一起创造更多可能!

点赞、收藏、关注,支持创作! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值