Java 根据对象中的一个属性从列表中获取最新对象

Java 根据对象中的一个属性从列表中获取最新对象,java,collections,Java,Collections,假设我有一个Pojo public MyTask { TaskType taskType; id taskId; ... } taskType的值只能来自以下Enum: public static enum TaskType { WRITE_DOC, UPDATE_DOC, SEND_DOC, OTHER }; 现在我有一个列表MyTask: List<MyTask> tasks = GOT_TASKS_FROM_SOMEWHERE(); 如何

假设我有一个Pojo

public MyTask {
    TaskType taskType;
    id taskId;
    ...
}
taskType
的值只能来自以下
Enum

public static enum TaskType {
    WRITE_DOC, UPDATE_DOC, SEND_DOC, OTHER
}; 
现在我有一个列表
MyTask

List<MyTask> tasks = GOT_TASKS_FROM_SOMEWHERE();

如何从与参数中的任务类型相匹配的列表(
tasks
)中获取最新的
MyTask

您可以反向迭代列表,找到的第一个具有所需类型的对象是结果:

ListIterator<MyTask> reverseIterator = tasks.listIterator(tasks.size());
while (reverseIterator.hasPrevious()) {
   MyTask task = reverseIterator.previous();
   if (task.getTaskType() == type)
      return task;
}

return null; // Not found
ListIterator reverseIterator=tasks.ListIterator(tasks.size());
while(reverseIterator.hasPrevious()){
MyTask任务=reverseIterator.previous();
if(task.getTaskType()==type)
返回任务;
}
返回null;//找不到

让我看看我是否理解正确。您有一个MyTask对象列表,并且希望检索列表中具有指定TaskType的最后一个元素。您可以对列表进行反向迭代,也可以在列表的开头添加元素并正常迭代。另一个解决方案是为您的数据结构使用LinkedHashMap。使用这种结构,检索速度应该很快,并且它将保持插入顺序。

您可以在
MyTask
中增加一个字段来存储更新时间。说“最近更新”

现在在下面的方法中

public MyTask getLatestTask(TaskName name){
   //iterate tasks list and prepare new list of tasks matching taskname = name
   // sort new list with comparator which compares list w.r.t 'lastupdated' value in desc order
   // return first  element from sorted list, which is the last updated task matching your criteria
}
  • 您可以拥有一个初始化为当前日期和时间的
    public final
    date对象
  • 或者您也可以按顺序更新id,在这种情况下,具有最大id的对象将是最新的对象
public MyTask getLatestTask(TaskName name){
   //iterate tasks list and prepare new list of tasks matching taskname = name
   // sort new list with comparator which compares list w.r.t 'lastupdated' value in desc order
   // return first  element from sorted list, which is the last updated task matching your criteria
}