добавьте время измерения кода в список и получите минимальное/ максимальное/ среднее / среднее время

#java

Вопрос:

Я хочу проверить время своего кода и получить минимальное / максимальное / среднее / среднее время кода, поэтому я использую секундомер как таковой:

 List<StopWatch> list = new ArrayList()<>;
stopwatch.start();
code
StopWatch passTime = stopwatch.stop();
list.add(passTime)
 

Я хочу, чтобы время удвоилось, чтобы я мог использовать функции min, max и mid списка, есть ли способ это сделать? или еще лучшее решение?
Спасибо

Комментарии:

1. Вам следует обратить внимание на использование микрометрических/метрических датчиков Dropwizard

2. Почему? что не так с текущим решением?

3. Ну, потому что они автоматически публикуют минимальную/максимальную и среднюю статистику

4. И то, и другое? Вам не нужна конкретная платформа для использования библиотек метрик

5. @ness — В документации по библиотекам должны быть примеры. Ты смотрела?

Ответ №1:

Вы можете транслировать список и собирать сводную статистику. Вот пример использования потока целых чисел. Существуют также обобщающие сборщики для double и long тоже.

 List<Integer> list =
                new ArrayList<>(List.of(10, 20, 30, 40, 50));
        
IntSummaryStatistics iss = list.stream().collect(Collectors.summarizingInt(Integer::intValue));
System.out.println(iss);
 

С принтами

 IntSummaryStatistics{count=5, sum=150, min=10, average=30.000000, max=50}
 

Каждое значение может быть доступно отдельно с помощью геттера. Примечание: сборщикам требуется a ToType function , чтобы получить поле, на котором можно вычислять статистику. Так что вам понадобится что-то вроде StopWatch::getTime или что-то, что имеет смысл.

Комментарии:

1. в том-то и проблема, что у секундомера нет чего-то подобного, у вас есть какие-нибудь идеи о том, как удвоить его?

2. Я не знаком с этим классом. Для этого мне нужно было бы посмотреть API. Но если вы не можете получить ценность, как ее использовать?

3. вы можете написать StopWatch passTime = stopwatch.stop(); or by StopWatch passTime = stopwatch.elapsed(TimeUnit.SECONDS); там, где идея интереса заключается в том, что вам на самом деле не нужно писать TimeUnit.SECONDS , потому что он знает, что измерять даже меньше секунды или больше секунды, и чем результат будет рассчитан именно для того, что нужно

4. Я сделал вот что : DoubleSummaryStatistics iss = timeList.stream().collect(Collectors.summarizingDouble(Double::doubleValue)); Похоже, это сработало, что это sw->sw в вашем примере?

5. Спасибо вам за помощь