Flutter : List<Document>,如何根据标题去除重复文档
Posted
技术标签:
【中文标题】Flutter : List<Document>,如何根据标题去除重复文档【英文标题】:Flutter : List<Document>, how to remove duplicate documents according to its title 【发布时间】:2021-02-28 21:13:08 【问题描述】:假设我有一个像这样的类文档:
class Document
String text;
String title;
String date;
我创建了一个文档列表(List Document listDocs),我想删除具有相同标题的文档,只保留日期最早的文档。
例如,如果我有 3 个标题相同(但文本和日期不同)的文档,我只想保留日期最早的文档。
有没有简单的方法?
谢谢!!
【问题讨论】:
【参考方案1】:要按日期对对象列表进行排序,您可以使用MyDocumentList.sort((a, b) => a.date.compareTo(b.date));
为了确保没有第二个具有相同标题的对象,您可以使用Set.
,即
A collection of objects in which each object can occur only once.
在这个集合中,您将存储所有看到的标题。然后你会遍历MyDocumentList
,尝试存储它的标题并且只添加一个新的Document
到uniqueDocuments
,如果seenDocumentTitles
不包含当前Document
的标题(如果seenDocumentTitles.add
返回true,表示该集合不包含文档标题)
Set<String> seenDocumentTitles = Set<String>();
List<Document> uniqueDocuments = MyDocumentList.where((document) => seenDocumentTitles.add(document.title)).toList();
举个例子,看看这个: https://dartpad.dartlang.org/20a889b174d2e45f7255d1b110be0627
【讨论】:
【参考方案2】:您可以添加一个从两个给定日期返回较早日期时间对象的函数,如下所示:
DateTime longer(String dateString, String dateString2)
DateTime dateTime = DateFormat("yyyy-MMMM-dd").parse(dateString);
DateTime dateTime2 = DateFormat("yyyy-MMMM-dd").parse(dateString2);
return dateTime.isBefore(dateTime2) ? dateTime : dateTime2;
然后,要检查这三个日期中的哪个日期更早,您可以在类中添加一个方法,例如:
DateTime longest(String dateTime, String dateTime2)
DateTime thisDate = DateFormat("yyyy-MMMM-dd").parse(this.date);
return thisDate.isBefore(longer(dateTime, dateTime2)) ? thisDate : longer(dateTime, dateTime2);
如果您想将该方法与 Document
类分离,您可以这样做:
DateTime longest(String dateTime, String dateTime2, String dateTime3)
DateTime firstDate = DateFormat("yyyy-MMMM-dd").parse(dateTime);
return firstDate.isBefore(longer(dateTime2, dateTime3)) ? firstDate : longer(dateTime2, dateTime3);
【讨论】:
以上是关于Flutter : List<Document>,如何根据标题去除重复文档的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中将 List<List<dynamic>> 转换为 ArrayList
Flutter/Dart - “List<dynamic>”不是“List<Product>”类型的子类型
Flutter/Firebase - List<dynamic> 没有实例 getter 'documents'
类型 'List<dynamic>' 不是类型 'FutureOr<List<RideData>>' 的子类型,Flutter