Agreed. contains(K key) should be provided. The iterator() method should return Iterator<Map.Entry<K, V>> instead of Iterator<Tuple2<K, V>>.
Besides, size() may also be provided. With these methods, MapStates appear very similar to Java Maps. Users will be very happy to use them. Regards, Xiaogang 2016-10-19 16:55 GMT+08:00 Till Rohrmann <trohrm...@apache.org>: > Hi Xiaogang, > > I really like your proposal and think that this would be a valuable > addition to Flink :-) > > For convenience we could maybe add contains(K key), too. > > Java's Map interface returns a Set of Entry when calling entrySet() (which > is the equivalent of iterator() in our interface). The Entry interface not > only allows to get access to the key and value of the map entry but also > allows to set a value for the respective key via setValue (even though it's > an optional operation). Maybe we want to offer something similar when > getting access to the entry set via the iterator method. > > Cheers, > Till > > On Wed, Oct 19, 2016 at 4:18 AM, SHI Xiaogang <shixiaoga...@gmail.com> > wrote: > > > Hi, all. I created the JIRA https://issues.apache.org/ > > jira/browse/FLINK-4856 to > > propose adding MapStates into Flink. > > > > MapStates are very useful in our daily jobs. For example, when > implementing > > DistinctCount, we store the values into a MapState and the result of each > > group(key) is exactly the number of entries in the MapState. > > > > In my opinion, the methods provided by the MapState may include: > > * void put(K key, V value) > > * V get(K key) > > * Iterable<K> keys() > > * Iterable<V> values() > > * Iterator<Tuple2<K, V>> iterator() > > > > Do you have any comments? Any is appreciated. > > > > Xiaogang > > >