Sampler.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package holeg.utility.math.decimal;
  2. import java.util.HashMap;
  3. import java.util.stream.Collectors;
  4. //To sample floats and get basic statistical values;
  5. public class Sampler {
  6. public HashMap<String, SampleInfo> logMap = new HashMap<String, SampleInfo>();
  7. public void addSample(String parameterName, float sample) {
  8. //Puts the sample in the right LogInfo container or create a new container if not exist jet
  9. if (logMap.containsKey(parameterName)) {
  10. SampleInfo info = logMap.get(parameterName);
  11. info.addSample(sample);
  12. } else {
  13. SampleInfo info = new SampleInfo();
  14. info.parameterName = parameterName;
  15. info.addSample(sample);
  16. logMap.put(parameterName, info);
  17. }
  18. }
  19. public String toString() {
  20. return logMap.values().stream().map(Object::toString).collect(Collectors.joining("\n"));
  21. }
  22. public void clear() {
  23. logMap.clear();
  24. }
  25. public class SampleInfo {
  26. public String parameterName;
  27. public int sampleSize = 0;
  28. public float min = Float.MAX_VALUE;
  29. public float max = Float.MIN_VALUE;
  30. private float sum = 0;
  31. public float getAvg() {
  32. if (sampleSize > 0) {
  33. return sum / (float) sampleSize;
  34. }
  35. return 0;
  36. }
  37. public void addSample(float sample) {
  38. if (sample < min) {
  39. min = sample;
  40. }
  41. if (sample > max) {
  42. max = sample;
  43. }
  44. sum += sample;
  45. sampleSize++;
  46. }
  47. public String toString() {
  48. return "[" + parameterName + " in Range(" + min + ", " + max + ") with a Average of "
  49. + getAvg() + " from " + sampleSize + " Smaples]";
  50. }
  51. }
  52. }