#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. Спасибо вам за помощь