code: public static <T, IV> Collection<T> selectWith(
              Iterable<T> iterable,
              Predicate2<? super T, ? super IV> predicate,
              IV parameter)
      {
          if (iterable instanceof MutableCollection)
          {
              return ((MutableCollection<T>) iterable).selectWith(predicate, parameter);
          }
          if (iterable instanceof ArrayList)
          {
              return ArrayListIterate.selectWith((ArrayList<T>) iterable, predicate, parameter);
          }
          if (iterable instanceof List)
          {
              return ListIterate.selectWith((List<T>) iterable, predicate, parameter);
          }
          if (iterable instanceof Collection)
          {
              return IterableIterate.selectWith(
                      iterable,
                      predicate,
                      parameter,
                      DefaultSpeciesNewStrategy.INSTANCE.<T>speciesNew((Collection<T>) iterable));
          }
          if (iterable != null)
          {
              return IterableIterate.selectWith(iterable, predicate, parameter, FastList.<T>newList());
          }
          throw new IllegalArgumentException("Cannot perform a selectWith on null");
      }
docs: Returns a new collection with only elements that evaluated to true for the specified predicate and parameter.
  <p>
  Example using a Java 8 lambda expression:
  <pre>
  Collection&lt;Person&gt; selected =
  Iterate.<b>selectWith</b>(people, (Person person, Integer age) -> person.getAge() >= age, Integer.valueOf(18));
  </pre>
  <p>
  Example using an anonymous inner class:
  <pre>
  Collection&lt;Person&gt; selected =
  Iterate.<b>selectWith</b>(people, new Predicate2&lt;Person, Integer&gt;()
  {
  public boolean accept(Person person, Integer age)
  {
  return person.getAge() >= age;
  }
  }, Integer.valueOf(18));
  </pre>