根据对象中的一个属性从List中获取最新的Object

时间:2014-03-26 10:00:54

标签: 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();

MyTask的上述列表包含来自Enum混合在一起的随机任务类型的多个任务。列表中的某些任务也可能具有相同的TaskType

我需要创建一个函数,它将一个TaskType作为参数,并从上面的任务列表中返回最新匹配任务:

public MyTask getLatestTaskOfType(TaskType type){
   //I am not sure how could I get the latest MyTask with the TaskType 
}

如何从列表MyTask)中获取与参数tasks匹配的最新TaskType

4 个答案:

答案 0 :(得分:0)

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

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

return null; // Not found

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以在MyTask中再添加一个字段来存储更新时间。说它'lastupdated'。

现在在下面的方法

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
}

答案 3 :(得分:0)

  • 您可以将public final日期对象初始化为当前日期和时间。
  • 或者您也可以按顺序更新ID,在这种情况下,具有最大ID的对象将是最新的。