@Override
public void window(MessageCollector collector, TaskCoordinator coordinator) throws Exception {
  HashMap<String, Transaction> transactions = new HashMap<>();
  List<LocalDateTime> localDateTimes = new ArrayList<>();
  
  KeyValueIterator<LocalDateTime, Quotes> iterator = stateStore.all();
  iterator.forEachRemaining(item -> {
    localDateTimes.add(item.getKey());
  });

  final AtomicReference<Quotes> predecessorQuotes = new AtomicReference<>();

  Collections.sort(localDateTimes);
  localDateTimes.forEach(localDateTime -> {
    Quotes quotes = stateStore.get(localDateTime);
    if (predecessorQuotes.get() != null) {
      Transaction transaction = discretize(quotes, predecessorQuotes.get(), mappingStrategy);
      transactions.put(localDateTime.format(formatter), transaction);
    }
    predecessorQuotes.set(quotes);
  });

  collector.send(new OutgoingMessageEnvelope(OUTPUT_STREAM, new Date().toString(), transactions));
  coordinator.commit(TaskCoordinator.RequestScope.CURRENT_TASK);
}


