code: public final Option<T> filter(Function<? super T, Boolean> predicate) {
              E.NPE(predicate);
              if (notDefined()) {
                  return none();
              }
              T v = get();
              if (predicate.apply(v)) {
                  return this;
              } else {
                  return none();
              }
          }
docs: If a value is present, and the value matches the given predicate,
  return an {@code Option} describing the value, otherwise return
  {@link #NONE}.
  
  @param predicate
  the function to test the value held by this {@code Option}
  @return an {@code Option} describing the value of this {@code Option} if
  a value is present and the value matches the given predicate,
  otherwise {@link #NONE}