On Thu, May 23, 2019 at 11:37 AM Rui Wang <ruw...@google.com> wrote: > 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"? >
Lets say A and B represent two different instances of the same Java type like a double, then A < B (using the languages comparison operator) iff encode(A) < encode(B) (note the encoded versions are compared lexicographically) > > -Rui >