code: public static <E> Optional<E> searchLast(Iterator<E> iterator, Predicate<E> predicate) {
          final Iterator<E> filtered = new FilteringIterator<E>(iterator, predicate);
          return new MaybeLastElement<E>().apply(filtered);
      }
docs: Searches the last matching element returning just element if found,
  nothing otherwise.
  
  @param <E> the element type parameter
  @param iterator the iterator to be searched
  @param predicate the predicate to be applied to each element
  @return just the last element found or nothing