class ElementsSatisfyingConsumer<E> {

  private final List<E> elements;

  ElementsSatisfyingConsumer(Iterable<? extends E> actual, Consumer<? super E> assertions) {
    this(filterByPassingAssertions(actual, assertions));
  }

  private static <E> List<E> filterByPassingAssertions(Iterable<? extends E> actual, Consumer<? super E> assertions) {
    return stream(actual).filter(byPassingAssertions(assertions)).collect(toList());
  }

  private ElementsSatisfyingConsumer(List<E> elements) {
    this.elements = elements;
  }

  List<E> getElements() {
    return elements;
  }

  /**
   * New <code>ElementsSatisfyingConsumer</code> containing all elements except the first occurrence of the given element.
   *
   * <p> This instance is not modified.
   *
   * @param element the element to remove from the result
   * @return all except the given element
   */
  ElementsSatisfyingConsumer<E> withoutElement(E element) {<FILL_FUNCTION_BODY>}

  private static void removeFirstReference(Object element, List<?> elements) {
    range(0, elements.size()).filter(i -> elements.get(i) == element)
                             .findFirst()
                             .ifPresent(elements::remove);
  }

}

    ArrayList<E> listWithoutElement = new ArrayList<>(elements);
    removeFirstReference(element, listWithoutElement);
    return new ElementsSatisfyingConsumer<>(listWithoutElement);
  
<no_super_class>