List 颤振:列表<;文件>;,如何根据标题删除重复文档

List 颤振:列表<;文件>;,如何根据标题删除重复文档,list,flutter,arraylist,duplicates,List,Flutter,Arraylist,Duplicates,假设我有这样一个类文档: class Document { String text; String title; String date; } 我创建了一个文档列表(List Document listDocs),我想删除标题相同的文档,只保留日期最早的文档 例如,如果我有3个标题相同(但文本和日期不同)的文档,我只想保留日期最早的文档 有简单的方法吗 谢谢 要按日期对对象列表进行排序,可以执行MyDocumentList.sort((a,b)=>a.date.compareT

假设我有这样一个类文档:

class Document {

  String text;
  String title;
  String date;

}
我创建了一个文档列表(List Document listDocs),我想删除标题相同的文档,只保留日期最早的文档

例如,如果我有3个标题相同(但文本和日期不同)的文档,我只想保留日期最早的文档

有简单的方法吗


谢谢

要按日期对对象列表进行排序,可以执行
MyDocumentList.sort((a,b)=>a.date.compareTo(b.date))

要确保没有具有相同标题的第二个对象,可以使用
集合。
这是

每个对象只能出现一次的对象集合。

在这个集合中,您将存储所有看到的标题。然后,如果
seenDocumentTitles
不包含当前
文档的标题,您可以查看
MyDocumentList
,尝试存储其标题,并仅向
uniqueDocuments
添加一个新的
文档(如果
请参见ndocumenttitles.add
返回true,表示集合不包含文档标题)

Set seenDocumentTitles=Set();
List uniqueDocuments=MyDocumentList.where((document)=>seenDocumentTitles.add(document.title)).toList();
有关示例,请查看以下内容:

您可以添加一个函数,从两个给定日期返回较早的日期时间对象,如下所示:

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);
}
如果要将该方法与
文档
类解耦,可以执行以下操作:

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