Java 根据对象中的一个属性从列表中获取最新对象
假设我有一个PojoJava 根据对象中的一个属性从列表中获取最新对象,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(); 如何
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
}
- 您可以拥有一个初始化为当前日期和时间的
date对象public final
- 或者您也可以按顺序更新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
}