code: public static <K, V, C> Stream<CacheEntry<K, C>> filterAndConvert(Stream<CacheEntry<K, V>> stream,
             KeyValueFilterConverter<? super K, ? super V, C> filterConverter) {
        return stream.map(new FilterConverterAsCacheEntryFunction(filterConverter)).filter(
                StreamMarshalling.nonNullPredicate());
     }
docs: Adds needed intermediate operations to the provided stream, returning a possibly new stream as a result of the
  operations.  This method keeps the contract of filter and conversion being performed in only 1 call as the
  {@link KeyValueFilterConverter} was designed to do.  The key,
  value and metadata are all used to determine whether the value is returned and the converted value.
  @param stream stream to perform the operations on
  @param filterConverter converter to apply
  @param <K>
  @param <V>
  @param <C>
  @return