Flutter:按共同字符串值合并Group对象列表
合并相同日期的Group对象解决方案
可以通过以下Dart代码实现相同dateFormatted的Group对象合并:
List<Group> mergeGroups(List<Group> groups) { // 以日期为键,分组存储所有事件 final Map<String, List<Event>> dateToEvents = {}; for (final group in groups) { // 若该日期已存在,追加事件;否则初始化事件列表 dateToEvents.update( group.dateFormatted, (existingEvents) => existingEvents..addAll(group.events), ifAbsent: () => List.from(group.events), ); } // 将分组结果转换回Group列表 return dateToEvents.entries.map((entry) { return Group( dateFormatted: entry.key, events: entry.value, ); }).toList(); }
逻辑说明
- 用
Map<String, List<Event>>按dateFormatted作为键分组,统一存储对应日期下的所有Event - 遍历原始Group列表,通过
Map.update方法批量追加事件:- 若日期已存在,直接把当前Group的events加到已有列表
- 若日期不存在,创建新列表并初始化当前Group的events
- 最后将Map的键值对转换为新的Group对象,得到合并后的列表
扩展处理
- 如果需要对合并后的Event排序,可在生成新Group时对
entry.value做排序处理,比如:events: entry.value..sort((a, b) => a.time.compareTo(b.time)), - 如果需要去重Event,需先在
Event类中重写==和hashCode,然后将列表转为集合再转回列表:events: entry.value.toSet().toList(),
内容的提问来源于stack exchange,提问作者user237462
相关产品推荐
相关产品推荐

