У меня есть веб-сервис, с которого я получаю время и цену.Я сохранил эти записи в ConcurrentHashMap, поскольку он должен поддерживаться в многопоточной среде с отметкой времени ( LocalDateTime ) в качестве ключа и ценой ( BigDecimal ) в качестве значений.Требовалось получить следующие данные
- Всего записей за последние 90 записей
- Среднее количество записей за последние 90 записей
- Самая низкая цена за последние 90 записей
- Самая высокая цена за последние 90 записей
- Общая цена за последние 90 записей
- Средняя цена за последние 90 записей
Я успешно выполнил требованиекод a показан ниже
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)