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

Dart中map方法返回List<List<Object>>而非List<Object>的解决方法

问题原因

两层map遍历的逻辑中,外层map针对每一个Truck对象返回的是一个List<TruckFruit>,最终聚合后的结果自然是List<List<TruckFruit>>类型的二维嵌套列表,要得到单层的List<TruckFruit>,只需要把内层生成的子列表展开拼接即可。

实现方案
  • 方案1:使用expand方法展平(推荐,写法最简洁)
    expand方法会将每个元素映射为可迭代对象后,自动把所有可迭代对象的元素拼接为一个单层可迭代序列,不需要在内层提前调用toList():
final listTruckFruits = event.trucks
    .expand((truck) => truck.fruits.map(
          (fruit) => TruckFruit(
            truckOrigin: truck.info.origin,
            fruitType: fruit.type,
          ),
        ))
    .toList();
  • 方案2:映射后统一展平
    如果保留原有两层map的写法,可以在映射完成后额外调用一次expand把嵌套的列表拆开,再转成列表:
final listTruckFruits = event.trucks
    .map((truck) => truck.fruits.map(
          (fruit) => TruckFruit(
            truckOrigin: truck.info.origin,
            fruitType: fruit.type,
          ),
        ))
    .expand((innerFruitList) => innerFruitList)
    .toList();
  • 方案3:使用集合for循环写法(逻辑直观)
    Dart内置的集合支持嵌套for循环的写法,直接在列表字面量里写两层遍历,不需要额外调用展平方法:
final listTruckFruits = [
  for (final truck in event.trucks)
    for (final fruit in truck.fruits)
      TruckFruit(
        truckOrigin: truck.info.origin,
        fruitType: fruit.type,
      )
];

三种写法最终输出结果完全一致,都是单层List<TruckFruit>类型,可根据团队代码规范和个人习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:42:25