2014-03-26 113 views
0

说我有一个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 
} 

我怎样才能从列表获得最新MyTasktasks),它与参数中的TaskType匹配?

+2

向后迭代? –

回答

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 
+0

您的解决方案看起来不错。我会尽力回复你 –

0

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

0

您可以在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 
} 
0
  • 你可以有它初始化为当前日期和时间的public final日期对象。
  • 或者你也可以依次更新id,在这种情况下,带有最大id的对象将是最新的。