kek

Форк
0
/
lol.java 
101 строка · 2.5 Кб
1
package ru.pm.dashboard.helper;
2

3
 import lombok.Getter;
4
import lombok.RequiredArgsConstructor;
5

6
 import java.io.Serializable;
7
import java.util.Comparator;
8

9
 /**
10
  * Класс предназначен для расчёта статистических показателей "на лету" без необходимости сохранять значения в списке.
11
  */
12
@RequiredArgsConstructor
13
@Getter
14
public class Stats implements Serializable, Comparable<Stats> {
15

16
     private static final long serialVersionUID = 5189576175560182641L;
17

18
     private final String x1;
19
     private final String x2;
20

21
     private long mN = 0L;
22
     private double mM = 0.0;
23
     private double mS = 0.0;
24

25
     private double min = Double.POSITIVE_INFINITY;
26
     private double max = Double.NEGATIVE_INFINITY;
27
     private double sum = 0.0;
28

29
     /**
30
      * Добавить очередное значение из исходных данных
31
      *
32
      * @param s Значение
33
      */
34
     public void push(String s) {
35
         ++mN;
36
         double x;
37
         try {
38
             x = Double.parseDouble(s);
39
         } catch (Exception e) {
40
             return;
41
         }
42
         double nextM = mM + (x - mM) / mN;
43
         mS += (x - mM) * (x - nextM);
44
         mM = nextM;
45

46
         sum += x;
47

48
         if (x < min) {
49
             min = x;
50
         }
51

52
         if (x > max) {
53
             max = x;
54
         }
55
     }
56

57
     public long numSamples() {
58
         return mN;
59
     }
60

61
     public double mean() {
62
         return mM;
63
     }
64

65
     public double variance() {
66
         return mN > 1 ? mS / mN : 0.0;
67
     }
68

69
     public double varianceUnbiased() {
70
         return mN > 1 ? mS / (mN - 1) : 0.0;
71
     }
72

73
     public double standardDeviation() {
74
         return Math.sqrt(variance());
75
     }
76

77
     public double standardDeviationUnbiased() {
78
         return Math.sqrt(varianceUnbiased());
79
     }
80

81
     public double min() {
82
         return min == Double.POSITIVE_INFINITY ? 0 : min;
83
     }
84

85
     public double max() {
86
         return max == Double.NEGATIVE_INFINITY ? 0 : max;
87
     }
88

89
     public double sum() {
90
         return sum;
91
     }
92

93
     private static final Comparator<String> NULL_SAFE_STRING_COMPARATOR = Comparator.nullsFirst(String::compareTo);
94

95
     @Override
96
     public int compareTo(Stats stats) {
97
         return Comparator.comparing(Stats::getX2, NULL_SAFE_STRING_COMPARATOR)
98
                 .thenComparing(Stats::getX1)
99
                 .compare(this, stats);
100
     }
101
}
102

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.