111111111111

Форк
0
/
111.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
 }

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

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

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

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