/** * Emits average for each key in end window. Data is computed during process * on input port Clears the internal data before return. */ @Override public void endWindow() { for (Map.Entry<K, MutableDouble> e : sums.entrySet()) { K key = e.getKey(); double d = e.getValue().doubleValue(); if (doubleAverage.isConnected()) { doubleAverage.emit(new KeyValPair<K, Double>(key, d / counts.get(key).doubleValue())); } if (intAverage.isConnected()) { intAverage.emit(new KeyValPair<K, Integer>(key, (int)d)); } if (longAverage.isConnected()) { longAverage.emit(new KeyValPair<K, Long>(key, (long)d)); } } sums.clear(); counts.clear(); } }