2016-07-05 66 views
-1

我需要java中的java實用程序方法(用於我的應用程序,它可以在數秒內獲得數千個請求),它具有以下功能。 請求的到達時間格式爲(DD-MM-YYYY-HH:MM:SS)和bucketNumber(1-100)。如何將請求的到達日期增加1毫秒(如果相同)

我想,如果相同的bucketNumber,如果相同的到達時間來自請求,它應該增加請求的到達時間值1毫秒。

例如:

如果bucketNumber = 1到達時間第一,第二,第三請求= 01-01-2016-10:00:00(實際上是時間直到毫01-01-2016-10: 00:00:000)以及01-01-2016-10:00:01的第四個請求。

所以對於第二請求的公用程序方法將返回01-01-2016-10:00:00(但其實這01-01-2016-10:00:00:001)

和第三個請求效用方法將返回01-01-2016-10:00:00(但這實際上是01-01-2016-10:00:00:002)

並且對於第4個請求實用方法將返回01-01 -2016-10:00:01而不進行任何操作。

我不想保留一個巨大的緩存來執行此操作(如果我使用set,那麼我想繼續刪除多餘的數據)。

//signature should be like below 
Date getIncrementedArrivalTimeIfSame(Date arrivaltime, int bucketNumber) { 
//return incremented if equal else return original arrivaltime 
} 

我應該使用具有bucketNumber作爲關鍵和一組到達時間的全球地圖?請幫我實施這個。該方法將以threadSafe方式在同步塊內調用。

回答

0

以下是我的解決方案。我使用finaly地圖:

static Map<Integer, Date> arrivalTimeMap = new HashMap<>(); 
static Date getIncrementedArrivalTimeIfEqual(Date arrivaltime, 
      int bucketNumber) { 

     Date lastArrivalTime = arrivalTimeMap.put(bucketNumber, arrivaltime); 
     if(lastArrivalTime != null && !lastArrivalTime.before(arrivaltime)){ 
      Date incrementedArrivalTime = incrementDateByMilliSeconds(
        lastArrivalTime, 1); 
      arrivaltime = incrementedArrivalTime; 

     } 
     arrivalTimeMap.put(bucketNumber, arrivaltime);  
     return arrivaltime; 
    } 
相關問題