Hi Jark If the state is very big, it may occupy a lot of memory if we return Set<Map.Entry<K, V>>.
By wrapping the returned iterator, we can easily implement a method returning Iterable<Map.Entry<K, V>>. Users can use that returned Iterable in the foreach loop. Regards Xiaogang 2016-10-19 17:43 GMT+08:00 Jark Wu <wuchong...@alibaba-inc.com>: > Hi Xiaogang, > > I think maybe return Set<Map.Entry<K,V>> is better than > Iterator<Map.Entry<K,V>>. > Because users can use foreach on Set but not Iterator, and can use > iterator access via set.iterator(). > Maybe Map.entrySet() is a more familiar way to users. > > > - Jark Wu > > > 在 2016年10月19日,下午5:18,SHI Xiaogang <shixiaoga...@gmail.com> 写道: > > > > 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 > >>> > >> > >