guava/src/com/google/common/collect/FluentIterable.java
@GwtIncompatible // Class.isInstance
  public final <T> FluentIterable<T> filter(Class<T> type) {
    return from(Iterables.filter(getDelegate(), type));
  }
@GwtIncompatible // Class.isInstance
  public final <T> FluentIterable<T> filter(Class<T> type) {
    return from(Iterables.filter(getDelegate(), type));
  }
@ GwtIncompatible // Class.isInstance public final < T > FluentIterable < T > filter ( Class < T > type ) { return from ( Iterables . filter ( getDelegate ( ) , type ) ) ; }
Returns the elements from this fluent iterable that are instances of class {@code type}.

<p><b>{@code Stream} equivalent:</b> {@code stream.filter(type::isInstance).map(type::cast)}.
This does perform a little more work than necessary, so another option is to insert an
unchecked cast at some later point:

<pre>
{@code @SuppressWarnings("unchecked") // safe because of ::isInstance check
ImmutableList<NewType> result =
(ImmutableList) stream.filter(NewType.class::isInstance).collect(toImmutableList());}
</pre>
Returns the elements from this fluent iterable that are instances of class { @code type } .