Example #1
0
 public Calculation(final C[] catagories, final Operation... operations) {
   if (catagories == null) {
     throw new NullPointerException("categories.not.specified");
   }
   if (operations == null || operations.length == 0) {
     throw new NullPointerException("operations.not.specified");
   }
   this.catagories = Arrays.copyOf(catagories, catagories.length);
   for (final Operation operation : operations) {
     this.operations[operation.ordinal()] = operation;
   }
   if (this.operations[Operation.SUM.ordinal()] != null
       || this.operations[Operation.AVERAGE.ordinal()] != null) {
     sum = new BigDecimal[catagories.length];
     final BigDecimal zero = new BigDecimal(0);
     for (int i = 0; i < catagories.length; i++) {
       sum[i] = zero;
     }
   }
   if (this.operations[Operation.AVERAGE.ordinal()] != null) {
     count = new long[catagories.length];
   }
   if (this.operations[Operation.MEDIAN.ordinal()] != null) {
     values = new List[catagories.length];
     for (int i = 0; i < catagories.length; i++) {
       values[i] = new ArrayList<BigDecimal>();
     }
   }
 }
Example #2
0
 public void registerValue(final C catagory, final BigDecimal value) {
   final int index = getIndex(catagory);
   if (operations[Operation.AVERAGE.ordinal()] != null) {
     count[index]++;
     sum[index] = sum[index].add(value);
   } else if (operations[Operation.SUM.ordinal()] != null) {
     sum[index] = sum[index].add(value);
   }
   if (operations[Operation.MEDIAN.ordinal()] != null) {
     values[index].add(value);
   }
 }