Sampler.java 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package holeg.utility.math.decimal;
  2. import java.util.HashMap;
  3. import java.util.stream.Collectors;
  4. /**
  5. * To sample floats and get basic statistical values.
  6. */
  7. public class Sampler {
  8. /**
  9. * A map containing all samples.
  10. */
  11. public HashMap<String, SampleInfo> logMap = new HashMap<String, SampleInfo>();
  12. /**
  13. * Add a sample by a string key.
  14. * @param parameterName a key
  15. * @param sample a sample
  16. */
  17. public void addSample(String parameterName, float sample) {
  18. //Puts the sample in the right LogInfo container or create a new container if not exist jet
  19. if (logMap.containsKey(parameterName)) {
  20. SampleInfo info = logMap.get(parameterName);
  21. info.addSample(sample);
  22. } else {
  23. SampleInfo info = new SampleInfo();
  24. info.parameterName = parameterName;
  25. info.addSample(sample);
  26. logMap.put(parameterName, info);
  27. }
  28. }
  29. /**
  30. * Clears the sample map.
  31. */
  32. public void clear() {
  33. logMap.clear();
  34. }
  35. public String toString() {
  36. return logMap.values().stream().map(Object::toString).collect(Collectors.joining("\n"));
  37. }
  38. /**
  39. * A class to store all sample of a key.
  40. */
  41. public static class SampleInfo {
  42. public String parameterName;
  43. public int sampleSize = 0;
  44. public float min = Float.MAX_VALUE;
  45. public float max = Float.MIN_VALUE;
  46. private float sum = 0;
  47. /**
  48. * Returns the average of all floats.
  49. * @return the average
  50. */
  51. public float getAvg() {
  52. if (sampleSize > 0) {
  53. return sum / (float) sampleSize;
  54. }
  55. return 0;
  56. }
  57. /**
  58. * Stores a sample in the struct.
  59. * @param sample a sample
  60. */
  61. public void addSample(float sample) {
  62. if (sample < min) {
  63. min = sample;
  64. }
  65. if (sample > max) {
  66. max = sample;
  67. }
  68. sum += sample;
  69. sampleSize++;
  70. }
  71. public String toString() {
  72. return "[" + parameterName + " in Range(" + min + ", " + max + ") with a Average of "
  73. + getAvg() + " from " + sampleSize + " Samples]";
  74. }
  75. }
  76. }