颤振:列表<Document>,如何根据其标题删除重复的文档



假设我有一个类文档,如下所示:

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);
}

最新更新