Flutter中如何用Set方法从对象列表提取唯一日期(仅年月日)
解决方案:基于年月日获取唯一日期
要解决这个问题,核心是忽略DateTime的时分秒部分,只保留年月日信息,让同一天的日期被Set判定为相等元素从而去重。
方法一:生成仅含年月日的DateTime对象
通过创建新的DateTime实例,只传入原日期的年、月、日参数(时分秒默认设为0),这样相同年月日的对象会被Set视为相等:
final uniqueDates = datalist .map((e) => DateTime(e.date.year, e.date.month, e.date.day)) .toSet();
方法二:直接生成格式化后的日期字符串(可选)
如果需要直接得到YYYY-MM-DD格式的字符串结果,可以在去重后进一步转换:
final uniqueDateStrings = datalist .map((e) => DateTime(e.date.year, e.date.month, e.date.day)) .toSet() .map((date) => "${date.year}-${date.month.toString().padLeft(2, '0')}-${date.day.toString().padLeft(2, '0')}" ) .toList();
原理说明
Dart中DateTime的相等性比较会精确到毫秒,所以原代码中即使是同一天的不同时间,也会被Set当成不同元素。通过生成仅保留年月日的新DateTime对象,就能让同一天的日期拥有完全相同的时间戳(时分秒均为0),从而被Set正确去重。
内容的提问来源于stack exchange,提问作者Irfan Ganatra
相关产品推荐
相关产品推荐

