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

Dart中如何更简洁遍历对象列表,满足条件时返回子列表且仅遍历一次?

解决方案

可以通过直接映射+条件查找的方式一步到位获取目标Stuff子列表,无需先拿到Thing对象再提取属性,写法更简洁,且不会产生多余遍历:

final targetStuffs = things
    .map((thing) => thing.stuffs)
    .firstWhere(
      (stuffs) => stuffs.any((s) => s.x == 'y'),
      orElse: () => [], // 处理找不到匹配项的情况,返回空列表
    );

说明

  1. map((thing) => thing.stuffs):将每个Thing对象直接转换为对应的stuffs列表,跳过中间持有Thing对象的步骤。
  2. firstWhere:遍历转换后的列表,找到第一个包含x值为'y'的Stuff元素的列表,找到后立即停止遍历,避免不必要的计算。
  3. orElse参数:可选,用于处理没有匹配项的场景,防止抛出StateError,这里返回空列表作为默认值。

如果确定列表中一定存在符合条件的项,也可以简化为:

final targetStuffs = things
    .map((thing) => thing.stuffs)
    .firstWhere((stuffs) => stuffs.any((s) => s.x == 'y'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:45:03