code: public <T> F4<P1, P2, P3, P4, T> andThen(final Function<? super R, ? extends T> f) {
              E.NPE(f);
              final Func4<P1, P2, P3, P4, R> me = this;
              return new F4<P1, P2, P3, P4, T>() {
                  @Override
                  public T apply(P1 p1, P2 p2, P3 p3, P4 p4) {
                      R r = me.apply(p1, p2, p3, p4);
                      return f.apply(r);
                  }
              };
          }
docs: Returns a composed function from this function and the specified function that takes the
  result of this function. When applying the composed function, this function is applied
  first to given parameter and then the specified function is applied to the result of
  this function.
  
  @param f
  the function takes the <code>R</code> type parameter and return <code>T</code>
  type result
  @param <T>
  the return type of function {@code f}
  @return the composed function
  @throws NullPointerException
  if <code>f</code> is null