code: public static <T, P> T detectWith(
              Iterable<T> iterable,
              Predicate2<? super T, ? super P> predicate,
              P parameter)
      {
          if (iterable instanceof MutableCollection)
          {
              return ((MutableCollection<T>) iterable).detectWith(predicate, parameter);
          }
          if (iterable instanceof ArrayList)
          {
              return ArrayListIterate.detectWith((ArrayList<T>) iterable, predicate, parameter);
          }
          if (iterable instanceof RandomAccess)
          {
              return RandomAccessListIterate.detectWith((List<T>) iterable, predicate, parameter);
          }
          if (iterable != null)
          {
              return IterableIterate.detectWith(iterable, predicate, parameter);
          }
          throw new IllegalArgumentException("Cannot perform detectWith on null");
      }
docs: Returns the first element of the iterable that evaluates to true for the specified predicate2 and parameter,
  or null if no element evaluates to true.
  <p>
  Example using a Java 8 lambda expression:
  <pre>
  Person person = Iterate.<b>detectWith</b>(people, (person, fullName) -> person.getFullName().equals(fullName), "John Smith");
  </pre>
  <p>
  Example using an anonymous inner class:
  <pre>
  Person person = Iterate.<b>detectWith</b>(people, new Predicate2&lt;Person, String&gt;()
  {
  public boolean value(Person person, String fullName)
  {
  return person.getFullName().equals(fullName);
  }
  }, "John Smith");
  </pre>