code: public <KK> EntryStream<KK, V> flatMapKeys(Function<? super K, ? extends Stream<? extends KK>> mapper) {
          return new EntryStream<>(stream().flatMap(e -> withValue(mapper.apply(e.getKey()), e.getValue())), context);
      }
docs: Returns an {@code EntryStream} consisting of the entries whose keys are
  results of replacing source keys with the contents of a mapped stream
  produced by applying the provided mapping function to each source key and
  values are left intact. Each mapped stream is
  {@link java.util.stream.BaseStream#close() closed} after its contents
  have been placed into this stream. (If a mapped stream is {@code null} an
  empty stream is used, instead.)
  
  <p>
  This is an <a href="package-summary.html#StreamOps">intermediate
  operation</a>.
  
  @param <KK> The type of new keys
  @param mapper a <a
  href="package-summary.html#NonInterference">non-interfering </a>,
  <a href="package-summary.html#Statelessness">stateless</a>
  function to apply to each key which produces a stream of new keys
  @return the new stream