code: public static <E> E findLast(E[] array, Predicate<E> predicate) {
          final Iterator<E> filtered = new FilteringIterator<E>(new ArrayIterator<E>(array), predicate);
          return new LastElement<E>().apply(filtered);
      }
docs: Searches the last matching element returning it.
  
  @param <E> the element type parameter
  @param array the array to be searched
  @param predicate the predicate to be applied to each element
  @throws IllegalArgumentException if no element matches
  @return the last element found