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

Dart如何移除嵌套列表中的null项 实现可空嵌套列表过滤

Dart 嵌套可空列表Null值过滤实现

符合签名的最优实现

直接用Dart原生迭代器懒加载方法实现,无额外依赖,无类型安全问题:

Iterable<Iterable<int>> removeNullItems(Iterable<Iterable<int?>?> nullableItemList) {
  return nullableItemList
      // 过滤外层为null的内层列表
      .whereType<Iterable<int?>>()
      // 逐个过滤内层列表中的null元素,自动转换为非空int类型迭代器
      .map((innerList) => innerList.whereType<int>());
}

实现说明

  • 为什么不能直接用whereType<Iterable<int>>()过滤外层:Dart泛型在运行时会保留类型信息,Iterable<int?>和Iterable<int>属于不同的运行时类型,直接按Iterable<int>过滤会把所有非空的、存储可空int的内层列表全部误筛,最终得到空结果。
  • 性能表现:整个实现是懒执行的,和原生whereType行为完全一致,不会在方法调用时就全量遍历拷贝所有数据,只有实际迭代访问元素时才会触发过滤逻辑,时间和内存开销都是最优水平。
  • 可读性:链式调用的逻辑和一维列表过滤的思路完全对齐,每一步的处理意图清晰,不需要写复杂的嵌套判空、类型强转逻辑,后续维护成本低。

如果业务场景需要得到可随机访问的嵌套List结构,只需要给内层、外层的处理结果追加toList()调用即可,示例:

List<List<int>> removeNullItemsAsList(Iterable<Iterable<int?>?> nullableItemList) {
  return nullableItemList
      .whereType<Iterable<int?>>()
      .map((innerList) => innerList.whereType<int>().toList())
      .toList();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:51:16