package org.act.tstream.stats.keyAvg;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.act.tstream.callback.RunnableCallback;
import org.act.tstream.stats.StatFunction;
import org.act.tstream.utils.Pair;
public class KeyAvgMerge extends RunnableCallback {
@SuppressWarnings("unchecked")
@Override
public <T> Object execute(T... args) {
List<Map<Object, Pair<Long, Long>>> list = (List<Map<Object, Pair<Long, Long>>>) args[0];
Map<Object, Pair<Long, Long>> result = new HashMap<Object, Pair<Long, Long>>();
Map<Object, List<Pair<Long, Long>>> trans = new HashMap<Object, List<Pair<Long, Long>>>();
for (Map<Object, Pair<Long, Long>> each : list) {
for (Entry<Object, Pair<Long, Long>> e : each.entrySet()) {
Object key = e.getKey();
List<Pair<Long, Long>> val = trans.get(key);
if (val == null) {
val = new ArrayList<Pair<Long, Long>>();
}
val.add(e.getValue());
trans.put(key, val);
}
}
for (Entry<Object, List<Pair<Long, Long>>> e : trans.entrySet()) {
result.put(e.getKey(), StatFunction.merge_keyed_avg(e.getValue()));
}
return result;
}
}