我有一个网络服务,我可以从中获得时间和价格。我已将这些记录保存在 ConcurrentHashMap 中,因为它需要在以时间戳 ( LocalDateTime ) 作为键和价格 ( BigDecimal ) 作为值的多线程环境中支持。要求是获得以下详细信息
最近 90 条记录中的总记录数
最近 90 条记录中的平均记录
过去 90 条记录中的最低价
过去 90 条记录中的最高价
最近 90 条记录的总价
最近 90 条记录的平均价格
我已经通过下面显示的代码成功达到了要求
ConcurrentHashMap<LocalDateTime, BigDecimal> data = // my full records
int totalRecords = 0;
BigDecimal highestPrice = new BigDecimal(0.0);
BigDecimal lowestPrice = new BigDecimal(0.0);
BigDecimal totalPriceSum = new BigDecimal(0.0);
Instant currentTime = Instant.now();
Duration limit = Duration.ofSeconds(90);
for (LocalDateTime time : data.keySet()) {
Duration duration = Duration.between(currentTime , time);
Boolean matches = ( duration.compareTo(limit) < 0 );
if(matches)
{
BigDecimal recordPrice = data.get(time);
if(recordPrice.compareTo(lowestPrice) < 0) {
lowestPrice = recordPrice;
}
if(recordPrice.compareTo(lowestPrice) > 0) {
highestPrice = recordPrice;
}
totalPriceSum = totalPriceSum.add(recordPrice);
totalRecords++;
}
}
System.out.println("Total records in last 90 records: "+ totalRecords);
System.out.println("Average records in last 90 records: "+ (totalRecords/90)*100);
System.out.println("Lowest Price in last 90 records: "+ lowestPrice);
System.out.println("Highest Price in last 90 records: "+ highestPrice);
System.out.println("Total Price in last 90 records: "+ totalPriceSum);
System.out.println("Average Price in last 90 records: "+ (totalPriceSum.doubleValue()/90)*100);
但是我的客户说这有一些性能问题,代码应该运行并给出 O(1)
任何人都可以帮助我或建议我采用不同的方法来实现这一目标。我应该不使用集合来实现 O(1)
肥皂起泡泡
收到一只叮咚
相关分类