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

Kotlin Koans用fold实现查询所有客户共购商品未通过求解答

问题排查与修复

错误原因

  • 核心逻辑与需求相悖:你当前的实现返回的是所有客户订购过的商品的并集,只要任意一个客户买过的商品都会被纳入结果,而题目要求返回的是所有客户都订购过的商品的交集,只有被每一位客户都购买过的商品才能进入结果集合。
  • fold操作逻辑错误:你使用空可变集合作为初始值,遍历过程中执行collector.plus(c.getOrderedProducts())是将当前客户的订购商品合并到已有集合中,最终结果只会不断新增元素,完全没有过滤掉未被所有客户购买的商品,自然不符合要求。

修复后代码

// Return the set of products that were ordered by all customers
fun Shop.getProductsOrderedByAll(): Set<Product> {
    // 无客户时直接返回空集合
    if (customers.isEmpty()) return emptySet()
    // 初始值取第一个客户的订购商品集合,后续逐个取交集
    return customers.fold(customers.first().getOrderedProducts().toSet()) { sharedProducts, customer ->
        sharedProducts.intersect(customer.getOrderedProducts())
    }
}

fun Customer.getOrderedProducts(): List<Product> =
    orders.flatMap { it.products }

逻辑说明

  • intersect() 是Kotlin集合内置的交集计算方法,返回同时存在于两个集合中的元素
  • 遍历每一位客户时,我们只保留已经被前面所有客户订购过、同时也被当前客户订购过的商品
  • 遍历完所有客户后,最终得到的交集就是所有客户都订购过的商品集合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:36:01