code: public static <C extends Collection<E>, E> C search(Iterable<E> iterable, C collection, Predicate<E> predicate) {
          dbc.precondition(iterable != null, "cannot search a null iterable");
          final Function<Iterator<E>, C> consumer = new ConsumeIntoCollection<>(new ConstantSupplier<C>(collection));
          final FilteringIterator<E> filtered = new FilteringIterator<E>(iterable.iterator(), predicate);
          return consumer.apply(filtered);
      }
docs: Searches the iterable, adding every value matching the predicate to the
  passed collection.
  
  @param <C> the collection type
  @param <E> the element type
  @param iterable the iterable to be searched
  @param collection the collection to be filled with matching elements
  @param predicate the predicate to be applied to each element
  @return the passed collection, filled with matching elements