> > A few obvious problems with this code: > 1. Removing the elements already processed from the bag requires > clearing and rewriting the entire bag. This is O(n^2) in the number of > input trades. > why it's not O(2 * n) to clearing and rewriting trade state?
> public interface SortedMultimapState<K, V> extends State { > // Add a value to the map. > void put(K key, V value); > // Get all values for a given key. > ReadableState<Iterable<V>> get(K key); > // Return all entries in the map. > ReadableState<Iterable<KV<K, V>>> allEntries(); > // Return all entries in the map with keys <= limit. returned elements > are sorted by the key. > ReadableState<Iterable<KV<K, V>>> entriesUntil(K limit); > // Remove all values with the given key; > void remove(K key); > // Remove all entries in the map with keys <= limit. > void removeUntil(K limit); > Will removeUntilExcl(K limit) also useful? It will remove all entries in the map with keys < limit. > Runners will sort based on the encoded value of the key. In order to make > this easier for users, I propose that we introduce a new tag on Coders > *PreservesOrder*. A Coder that contains this tag guarantees that the > encoded value preserves the same ordering as the base Java type. > Could you clarify what is "encoded value preserves the same ordering as the base Java type"? -Rui