code: @Override
      public <T> ICompletableFuture<ReadResultSet<T>> readFromEventJournal(
              long startSequence,
              int minSize,
              int maxSize,
              int partitionId,
              java.util.function.Predicate<? super EventJournalMapEvent<K, V>> predicate,
              java.util.function.Function<? super EventJournalMapEvent<K, V>, ? extends T> projection) {
          if (maxSize < minSize) {
              throw new IllegalArgumentException("maxSize " + maxSize
                      + " must be greater or equal to minSize " + minSize);
          }
          final ManagedContext context = serializationService.getManagedContext();
          context.initialize(predicate);
          context.initialize(projection);
          final MapEventJournalReadOperation<K, V, T> op = new MapEventJournalReadOperation<>(
                  name, startSequence, minSize, maxSize, predicate, projection);
          op.setPartitionId(partitionId);
          return operationService.invokeOnPartition(op);
      }
docs: {@inheritDoc}
  <p>
  This implementation will skip cloning of the predicate and projection
  for performance reasons. Because of this, the results of the projection
  and predicate should not depend on any state that will be lost while
  cloning. If you wish to get rid of user state, you may clone the predicate
  and projection and keep them cached for all calls to this method to avoid
  the overhead of cloning.