跳转到内容

Kotlin数据聚合

来自代码酷

Kotlin数据聚合是指将数据集中的多个值通过特定操作(如求和、平均值、分组等)合并为单一结果的过程。它是数据处理中的核心概念,广泛应用于数据分析、报表生成和业务逻辑实现。Kotlin通过标准库函数(如`groupBy`、`fold`、`reduce`)和扩展函数(如`sumBy`、`average`)提供了简洁高效的聚合操作支持。

核心概念[编辑 | 编辑源代码]

数据聚合通常分为以下几类:

  • 分组聚合:按条件将数据分组后计算(如按部门统计薪资总和)。
  • 累积聚合:逐步合并数据(如计算列表元素的累加和)。
  • 统计聚合:直接计算统计量(如平均值、最大值)。

分组聚合[编辑 | 编辑源代码]

Kotlin的`groupBy`函数将集合按键分组,后续可对每组数据进一步处理。

  
data class Product(val category: String, val price: Double)  

fun main() {  
    val products = listOf(  
        Product("Electronics", 999.99),  
        Product("Books", 15.99),  
        Product("Electronics", 499.99)  
    )  

    // 按类别分组并计算每类总价  
    val totalByCategory = products.groupBy { it.category }  
        .mapValues { (_, items) -> items.sumOf { it.price } }  

    println(totalByCategory) // 输出: {Electronics=1499.98, Books=15.99}  
}

累积聚合[编辑 | 编辑源代码]

使用`fold`或`reduce`实现累积计算。`fold`需指定初始值,`reduce`直接使用第一个元素作为初始值。

  
fun main() {  
    val numbers = listOf(1, 2, 3, 4)  

    // 使用reduce计算乘积  
    val product = numbers.reduce { acc, num -> acc * num }  
    println(product) // 输出: 24  

    // 使用fold计算阶乘(初始值为1)  
    val factorial = numbers.fold(1) { acc, num -> acc * num }  
    println(factorial) // 输出: 24  
}

统计聚合[编辑 | 编辑源代码]

Kotlin提供直接统计函数如`sum()`、`average()`等。

  
fun main() {  
    val temperatures = listOf(22.5, 23.0, 21.5, 20.0)  
    println("Average: ${temperatures.average()}") // 输出: 21.75  
    println("Max: ${temperatures.maxOrNull()}")   // 输出: 23.0  
}

实际案例[编辑 | 编辑源代码]

电商订单分析[编辑 | 编辑源代码]

假设需要分析订单数据,计算每个用户的消费总额和订单数:

  
data class Order(val userId: Int, val amount: Double)  

fun analyzeOrders(orders: List<Order>): Map<Int, Pair<Double, Int>> {  
    return orders.groupBy { it.userId }  
        .mapValues { (_, userOrders) ->  
            userOrders.sumOf { it.amount } to userOrders.size  
        }  
}  

fun main() {  
    val orders = listOf(  
        Order(1, 99.99),  
        Order(2, 50.0),  
        Order(1, 29.99)  
    )  
    println(analyzeOrders(orders)) // 输出: {1=129.98 to 2, 2=50.0 to 1}  
}

流程图:数据聚合过程[编辑 | 编辑源代码]

flowchart LR A[原始数据] --> B[分组操作] B --> C[每组计算聚合值] C --> D[聚合结果]

数学公式示例[编辑 | 编辑源代码]

对于加权平均值计算,公式为: Weighted Average=i=1n(wi×xi)i=1nwi

Kotlin实现:

  
fun weightedAverage(values: List<Double>, weights: List<Double>): Double {  
    require(values.size == weights.size)  
    return values.zip(weights) { v, w -> v * w }.sum() / weights.sum()  
}

高级技巧[编辑 | 编辑源代码]

  • 使用`asSequence()`处理大数据集以提高性能。
  • 结合`filter`和聚合函数实现条件聚合(如仅统计正数的平均值)。

通过上述内容,读者可以掌握Kotlin数据聚合的基础与进阶用法,并应用于实际开发场景。