MST

星途 面试题库

面试题:Kotlin Flow 操作符的组合使用场景

假设有一个需求,需要从 Flow 中获取一系列整数,首先过滤掉偶数,然后将剩余的奇数平方,最后收集结果。请使用 Kotlin Flow 操作符实现该逻辑,并解释每一步操作符组合的意义。
47.4万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.toList

fun getProcessedNumbers(): Flow<Int> {
    // 模拟生成一系列整数的Flow
    return flow {
        for (i in 1..10) {
            emit(i)
        }
    }
    // 过滤掉偶数
   .filter { it % 2 != 0 }
    // 将剩余的奇数平方
   .map { it * it }
}

fun main() = runBlocking {
    val result = getProcessedNumbers().toList()
    println(result)
}

操作符组合意义解释:

  1. flow:构建一个 Flow,这里通过 for 循环发射从 1 到 10 的整数。
  2. filter:过滤掉偶数,只保留奇数。filter 操作符会遍历 Flow 发射的每一个元素,根据传入的条件判断是否保留该元素。
  3. map:对过滤后剩下的奇数进行平方操作。map 操作符会对 Flow 发射的每一个元素应用传入的变换函数,将其转换为新的元素。
  4. toList:将 Flow 中的所有元素收集到一个 List 中,方便查看最终结果。在 main 函数中通过 runBlocking 协程构建器来执行这个收集操作。