假设我有一个类文档,如下所示:
class Document {
String text;
String title;
String date;
}
我创建了一个文档列表(ListDocumentlistDocs(,我想删除具有相同标题的文档,只保留日期最早的文档。
例如,如果我有3个标题相同(但文本和日期不同(的文档,我只想保留日期最早的文档。
有简单的方法吗?
谢谢!!
要按日期对对象列表进行排序,可以执行MyDocumentList.sort((a, b) => a.date.compareTo(b.date));
为了确保没有第二个具有相同标题的对象,您可以使用Set.
,即
A collection of objects in which each object can occur only once.
在这个集合中,您将存储所有看到的标题。然后,如果seenDocumentTitles
不包含当前Document
的标题(如果seenDocumentTitles.add
返回true,意味着该集合不包含文档标题(,则您将遍历MyDocumentList
,尝试存储其标题,并仅向uniqueDocuments
添加新的Document
。
Set<String> seenDocumentTitles = Set<String>();
List<Document> uniqueDocuments = MyDocumentList.where((document) => seenDocumentTitles.add(document.title)).toList();
例如,请查看:https://dartpad.dartlang.org/20a889b174d2e45f7255d1b110be0627
您可以添加一个函数,从两个给定日期返回一个较早的日期-时间对象,如下所示:
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);
}