code: public static <K, V> Map<K, V> filterEntries(
        Map<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
      checkNotNull(entryPredicate);
      return (unfiltered instanceof AbstractFilteredMap)
          ? filterFiltered((AbstractFilteredMap<K, V>) unfiltered, entryPredicate)
          : new FilteredEntryMap<K, V>(checkNotNull(unfiltered), entryPredicate);
    }
docs: Returns a map containing the mappings in {@code unfiltered} that satisfy a predicate. The
  returned map is a live view of {@code unfiltered}; changes to one affect the other.
  
  <p>The resulting map's {@code keySet()}, {@code entrySet()}, and {@code values()} views have
  iterators that don't support {@code remove()}, but all other methods are supported by the map
  and its views. When given a key/value pair that doesn't satisfy the predicate, the map's {@code
  put()} and {@code putAll()} methods throw an {@link IllegalArgumentException}. Similarly, the
  map's entries have a {@link Entry#setValue} method that throws an {@link
  IllegalArgumentException} when the existing key and the provided value don't satisfy the
  predicate.
  
  <p>When methods such as {@code removeAll()} and {@code clear()} are called on the filtered map
  or its views, only mappings that satisfy the filter will be removed from the underlying map.
  
  <p>The returned map isn't threadsafe or serializable, even if {@code unfiltered} is.
  
  <p>Many of the filtered map's methods, such as {@code size()}, iterate across every key/value
  mapping in the underlying map and determine which satisfy the filter. When a live view is
  <i>not</i> needed, it may be faster to copy the filtered map and use the copy.
  
  <p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with equals</i>, as documented
  at {@link Predicate#apply}.