code: public Iterator<Entry<K, V>> iterator(int fetchSize, int partitionId, boolean prefetchValues) {
          return new MapPartitionIterator<>(this, fetchSize, partitionId, prefetchValues);
      }
docs: Returns an iterator for iterating entries in the {@code partitionId}. If {@code prefetchValues} is
  {@code true}, values will be sent along with the keys and no additional data will be fetched when
  iterating. If {@code false}, only keys will be sent and values will be fetched when calling {@code
  Map.Entry.getValue()} lazily.
  <p>
  The entries are not fetched one-by-one but in batches.
  You may control the size of the batch by changing the {@code fetchSize} parameter.
  A too small {@code fetchSize} can affect performance since more data will have to be sent to and from the partition owner.
  A too high {@code fetchSize} means that more data will be sent which can block other operations from being sent,
  including internal operations.
  The underlying implementation may send more values in one batch than {@code fetchSize} if it needs to get to
  a "safepoint" to resume iteration later.
  <p>
  <b>NOTE</b>
  Iterating the map should be done only when the {@link IMap} is not being
  mutated and the cluster is stable (there are no migrations or membership changes).
  In other cases, the iterator may not return some entries or may return an entry twice.
  
  @param fetchSize      the size of the batches which will be sent when iterating the data
  @param partitionId    the partition ID which is being iterated
  @param prefetchValues whether to send values along with keys (if {@code true}) or
  to fetch them lazily when iterating (if {@code false})
  @return the iterator for the projected entries