Examples

Here is an example of code that uses the jAgg API:

The Record class is an example class that stores data to aggregate:

public class Record {
   private String trialClass;
   private float testResult;
   public Record(String trialClass, float result) {
      this.trialClass = trialClass; testResult = result; }
   public String getTrialClass() { return trialClass; }
   public float getTestResult() { return testResult; }
}
            

The following is code that generates a List of Records and calls the jAgg API:

List<Record> rawData = new ArrayList<Record>();
rawData.add(new Record("placebo", 60.5));
rawData.add(new Record("placebo", 62.5));
rawData.add(new Record("placebo", 58.5));
rawData.add(new Record("newDrug", 80.5));
rawData.add(new Record("newDrug", 83.5));
rawData.add(new Record("newDrug", 77.5));

List<String> properties = new ArrayList<String>();
properties.add("trialClass");

List<Aggregator> aggregators = new ArrayList<Aggregator>();
aggregators.add(new CountAggregator("*"));
aggregators.add(new AvgAggregator("testResult"));
aggregators.add(new StdDevAggregator("testResult"));

List<AggregateValue<Record>> aggValues = Aggregations.groupBy(
   rawData, properties, aggregators);

for (AggregateValue<Record> aggValue : aggValues )
{
   Record r = aggValue.getObject();
   StringBuffer buf = new StringBuffer();
   buf.append(r.getTrialClass());
   buf.append(":");
   for (Aggregator aggregator : aggregators)
   {
      buf.append(" ");
      buf.append(aggregator.toString());
      buf.append("=");
      buf.append(aggValue.getAggregateValue(aggregator));
   }
   System.out.println(buf.toString());
}
            

Alternatively, using Multiset Discrimination, one would replace the call to "groupBy" above with the following line:

List<AggregateValue<Record>> aggValues = Aggregations.groupBy(
   rawData, properties, aggregators, true);
            

This code would output the following:

newDrug: Count(*)=3 Avg(testResult)=80.5 StdDev(testResult)=3
placebo: Count(*)=3 Avg(testResult)=60.5 StdDev(testResult)=2