public Map<Long, DelayStatInfo> listTimelineDelayStat(Long pipelineId, Date start, Date end) {

        Map<Long, DelayStatInfo> delayStatInfos = new LinkedHashMap<Long, DelayStatInfo>();
        List<DelayStatDO> delayStatDOs = delayStatDao.listTimelineDelayStatsByPipelineId(pipelineId, start, end);
        int size = delayStatDOs.size();
        int k = size - 1;
        for (Long i = start.getTime(); i <= end.getTime(); i += 60 * 1000) {
            DelayStatInfo delayStatInfo = new DelayStatInfo();
            List<DelayStat> delayStats = new ArrayList<DelayStat>();
            // 取出每个时间点i以内的数据，k是一个游标，每次遍历时前面已经取过了的数据就不用再遍历了
            for (int j = k; j >= 0; --j) {
                if ((i - delayStatDOs.get(j).getGmtModified().getTime() <= 60 * 1000)
                    && (i - delayStatDOs.get(j).getGmtModified().getTime() >= 0)) {
                    delayStats.add(delayStatDOToModel(delayStatDOs.get(j)));
                    k = j - 1;
                }// 如果不满足if条件，则后面的数据也不用再遍历
                else {
                    break;
                }
            }
            if (delayStats.size() > 0) {
                delayStatInfo.setItems(delayStats);
                delayStatInfos.put(i, delayStatInfo);
            }

        }
        return delayStatInfos;
    }
public Map < Long , DelayStatInfo > listTimelineDelayStat ( Long pipelineId , Date start , Date end ) { Map < Long , DelayStatInfo > delayStatInfos = new LinkedHashMap < Long , DelayStatInfo > ( ) ; List < DelayStatDO > delayStatDOs = delayStatDao . listTimelineDelayStatsByPipelineId ( pipelineId , start , end ) ; int size = delayStatDOs . size ( ) ; int k = size - 1 ; for ( Long i = start . getTime ( ) ; i <= end . getTime ( ) ; i += 60 * 1000 ) { DelayStatInfo delayStatInfo = new DelayStatInfo ( ) ; List < DelayStat > delayStats = new ArrayList < DelayStat > ( ) ; for ( int j = k ; j >= 0 ; -- j ) { if ( ( i - delayStatDOs . get ( j ) . getGmtModified ( ) . getTime ( ) <= 60 * 1000 ) && ( i - delayStatDOs . get ( j ) . getGmtModified ( ) . getTime ( ) >= 0 ) ) { delayStats . add ( delayStatDOToModel ( delayStatDOs . get ( j ) ) ) ; k = j - 1 ; } else { break ; } } if ( delayStats . size ( ) > 0 ) { delayStatInfo . setItems ( delayStats ) ; delayStatInfos . put ( i , delayStatInfo ) ; } } return delayStatInfos ; }
列出pipeLineId下，start-end时间段下的delayStat