android/guava/src/com/google/common/collect/Maps.java
public static <K, V> BiMap<K, V> filterEntries(
      BiMap<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
    checkNotNull(unfiltered);
    checkNotNull(entryPredicate);
    return (unfiltered instanceof FilteredEntryBiMap)
        ? filterFiltered((FilteredEntryBiMap<K, V>) unfiltered, entryPredicate)
        : new FilteredEntryBiMap<K, V>(unfiltered, entryPredicate);
  }
public static <K, V> BiMap<K, V> filterEntries(
      BiMap<K, V> unfiltered, Predicate<? super Entry<K, V>> entryPredicate) {
    checkNotNull(unfiltered);
    checkNotNull(entryPredicate);
    return (unfiltered instanceof FilteredEntryBiMap)
        ? filterFiltered((FilteredEntryBiMap<K, V>) unfiltered, entryPredicate)
        : new FilteredEntryBiMap<K, V>(unfiltered, entryPredicate);
  }
Returns a bimap containing the mappings in {@code unfiltered} that satisfy a predicate. The
returned bimap is a live view of {@code unfiltered}; changes to one affect the other.

<p>The resulting bimap'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 bimap
and its views. When given a key/value pair that doesn't satisfy the predicate, the bimap's
{@code put()}, {@code forcePut()} and {@code putAll()} methods throw an {@link
IllegalArgumentException}. Similarly, the map's entries have an {@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
bimap or its views, only mappings that satisfy the filter will be removed from the underlying
bimap.

<p>The returned bimap isn't threadsafe or serializable, even if {@code unfiltered} is.

<p>Many of the filtered bimap's methods, such as {@code size()}, iterate across every key/value
mapping in the underlying bimap and determine which satisfy the filter. When a live view is
<i>not</i> needed, it may be faster to copy the filtered bimap and use the copy.

<p><b>Warning:</b> {@code entryPredicate} must be <i>consistent with equals </i>, as documented
at {@link Predicate#apply}.

@since 14.0