如何将List<Thing>的属性a与嵌套List<String> b合并为单一List<String>?
解决方案
你可以用Dart的expand方法来实现,它比单纯的map更适合这种“单个元素转多个元素并扁平化”的场景,一行代码就能搞定:
首先假设你的Thing类定义如下:
class Thing { final String a; final List<String> b; Thing(this.a, this.b); }
处理代码:
List<String> combinedList = myList.expand((thing) => [thing.a, ...thing.b]).toList();
原理说明
expand方法会遍历myList中的每个Thing对象,将每个对象转换为一个包含a属性和b列表所有元素的可迭代对象(这里用数组字面量+展开运算符...快速实现)- 它会自动把所有这些可迭代对象里的元素“平铺”成一个单一的可迭代集合,最后调用
toList()转换成目标列表
如果你的b属性可能为null,可以加个空值处理避免报错:
List<String> combinedList = myList.expand((thing) => [thing.a, ...(thing.b ?? [])]).toList();
对比你原来的循环写法,这种函数式的方式更简洁,也更符合Dart的惯用写法。
内容的提问来源于stack exchange,提问作者Coltuxumab
相关产品推荐
相关产品推荐

