Flutter 如何对 personality 列表数据的 famousAs 字段执行 groupBy 分组
Flutter 按famousAs字段对List分组的实现方法
方案1:原生实现(无需额外依赖)
直接手动遍历列表完成分组,不需要引入任何第三方包,代码如下:
// 你的原始接口返回数据 List<dynamic> personalityList = [ { "FullName":"Harry Potter", "DateOfBirth": "2020/02/16", "Department":"Branch Operation", "BirthDay":"Friday", "famousAs":"Actor" }, { "FullName":"John Wick", "DateOfBirth": "2020/02/16", "Department":"Finance", "BirthDay":"Friday", "famousAs":"Actor" }, { "FullName":"Priyanka Chopara", "DateOfBirth":"2020/02/19", "Department":"Loan", "BirthDay":"Monday", "famousAs":"Actress" } ]; // 存储分组结果 Map<String, List<dynamic>> groupedData = {}; for (var item in personalityList) { String groupKey = item['famousAs'] as String; // 对应分组不存在时先初始化 if (!groupedData.containsKey(groupKey)) { groupedData[groupKey] = []; } groupedData[groupKey]!.add(item); }
执行后groupedData就是按famousAs分组后的结果,key为对应的分类值,value为该分类下的所有条目列表。
方案2:使用collection包简化实现(官方维护)
如果可以引入工具包,用Dart官方维护的collection包的groupBy方法可以一行代码完成分组:
- 先在
pubspec.yaml的dependencies节点添加依赖:
dependencies: flutter: sdk: flutter collection: ^1.18.0 # 选择适配你的Flutter版本的版本号即可
- 代码中调用groupBy方法:
import 'package:collection/collection.dart'; // 直接完成分组 Map<String, List<dynamic>> groupedData = groupBy(personalityList, (item) => item['famousAs'] as String);
两种方案最终输出的分组结果完全一致,可根据项目需求选择。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

