code: @SuppressWarnings("unchecked")
    @GwtIncompatible // Class.isInstance
    public static <T> Iterable<T> filter(final Iterable<?> unfiltered, final Class<T> desiredType) {
      checkNotNull(unfiltered);
      checkNotNull(desiredType);
      return (Iterable<T>) filter(unfiltered, Predicates.instanceOf(desiredType));
    }
docs: Returns a view of {@code unfiltered} containing all elements that are of the type {@code
  desiredType}. The returned iterable's iterator does not support {@code remove()}.
  
  <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>