java中的时间排序易错点

    最近做流程项目时候发现,流程日志显示的问题:
    流程执行完最后一个任务节点就会紧接着执行结束节点,如果最后节点的执行日志和结束节点的执行日志在同一个时间点被存放到日志表中时候,通过比较两者在日志表中创建的时间先后的话,通过下面的方法就会出现,最后任务节点和结束节点顺序颠倒的问题。
   仔细想想,这种情况适合所有按照时间排序的情况,以后只要根据时间排序,就应该考虑到时间相等的情况,值得记录一下。

   原先的比较时间的代码:
	/**
	 * 查询历史步骤
	 * @return
	 */
	public String queryHistoryStep(){
		WorkflowDeptService workFlowDeptService=(WorkflowDeptService)getServiceBean("workflowDeptService");
		WorkflowLogService workflowLogService = (WorkflowLogService)getServiceBean("workflowLogService");
		TbBSenseWorkFlowLog log = new TbBSenseWorkFlowLog();
		log.setSwfolWorkflowInst(pid);
		List<TbBSenseWorkFlowLog> logs = workflowLogService.findWorkflowLogByExample(log);
		Collections.sort(logs, new Comparator<TbBSenseWorkFlowLog>() {
			public int compare(TbBSenseWorkFlowLog arg0, TbBSenseWorkFlowLog arg1) {
				if(arg0.getSwfolCreateTime().after(arg1.getSwfolCreateTime()))
					return 1;
				else 
					return -1;
			};
		});
		jsonConfig.registerJsonValueProcessor(Timestamp.class, new JsonTimestampValueProcessorImpl());
		JSONArray json = JSONArray.fromObject(logs,jsonConfig);
		writerText(json.toString());
		return null;
	}

要修改的地方是if判断语句,将时间相等的情况加上就对了,修改后的判断语句如下:
if(arg0.getSwfolCreateTime().after(arg1.getSwfolCreateTime())||arg0.getSwfolCreateTime().equals(arg1.getSwfolCreateTime()))

猜你喜欢

转载自kevin12.iteye.com/blog/1828065
今日推荐