code: public static <T, P> void forEachWith(
              Iterable<T> iterable,
              Procedure2<? super T, ? super P> procedure,
              P parameter)
      {
          if (iterable instanceof InternalIterable)
          {
              ((InternalIterable<T>) iterable).forEachWith(procedure, parameter);
          }
          else if (iterable instanceof ArrayList)
          {
              ArrayListIterate.forEachWith((ArrayList<T>) iterable, procedure, parameter);
          }
          else if (iterable instanceof List)
          {
              ListIterate.forEachWith((List<T>) iterable, procedure, parameter);
          }
          else if (iterable != null)
          {
              IterableIterate.forEachWith(iterable, procedure, parameter);
          }
          else
          {
              throw new IllegalArgumentException("Cannot perform a forEachWith on null");
          }
      }
docs: The procedure2 is evaluated for each element of the iterable with the specified parameter passed
  as the second argument.
  <p>
  Example using a Java 8 lambda expression:
  <pre>
  Iterate.<b>forEachWith</b>(people, (Person person, Person other) ->
  {
  if (other.equals(person))
  {
  LOGGER.info(person.getName());
  }
  }, fred);
  </pre>
  <p>
  <pre>e.g.
  Iterate.<b>forEachWith</b>(people, new Procedure2<Person, Person>()
  {
  public void value(Person person, Person other)
  {
  if (person.isRelatedTo(other))
  {
  LOGGER.info(person.getName());
  }
  }
  }, fred);
  </pre>