You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅在特定条件满足时返回List类型的Kotlin Flow?

解决方案

你想要的是仅当boolean为false时发射列表,不发射emptyList(),同时保持返回Flow<List<Item>>类型,以下是可行的实现方式:

方法1:用filter过滤不符合条件的结果

先通过combine将两个流的结果组合,再过滤掉boolean为true的情况,最后提取出items:

override fun returnFlow(): Flow<List<Item>> {
    return combine(itemsFlow(), booleanFlow()) { items, boolean ->
        items to boolean
    }
    .filter { (_, boolean) -> !boolean }
    .map { (items, _) -> items }
}

方法2:用filterNotNull简化逻辑

在combine的lambda里,符合条件返回items,不符合返回null,再通过filterNotNull过滤掉null值:

override fun returnFlow(): Flow<List<Item>> {
    return combine(itemsFlow(), booleanFlow()) { items, boolean ->
        if (!boolean) items else null
    }
    .filterNotNull()
}

关于你提到的cancelFlow()和返回Nothing的问题:

  • cancelFlow()会直接终止整个Flow,一旦调用,后续即使boolean变回false也不会再发射任何值,这不符合“条件恢复后继续发射”的需求,而且终止Flow的操作无法保持Flow<List<Item>>的返回类型。
  • 返回Nothing的话,combine的结果会变成Flow<Nothing>,无法向上转型为Flow<List<Item>>,不符合函数的返回类型要求。

另外你写的while逻辑是无效的,combine的lambda每次流有新值时都会执行一次,while在这里只会陷入循环,根本不会改变Flow的发射行为。

内容的提问来源于stack exchange,提问作者Targetbus12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:55:19