docs: public static <T> Iterable<T> filter(final Iterable<T> fromIterable, final Predicate<? super T> predicate) {
          checkNotNull(fromIterable, "iterable must be non null");
          checkNotNull(predicate, "predicate must be non null");
          return new SupplierIterable<T>(new Supplier<Optional<T>>() {
              private final Iterator<T> fromIterator = fromIterable.iterator();
  
              public Optional<T> get() {
                  while (fromIterator.hasNext()) {
                      final T value = fromIterator.next();
                      if (predicate.test(value)) {
                          return of(value);
                      }
                  }
                  return Optional.empty();
              }
          });
      }