2016-07-05 71 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; 
    } 
相关问题