code: public F1<P1, R> andThen(final Function<? super P1, ? extends R>... afters) {
              if (0 == afters.length) {
                  return this;
              }
              final F1<P1, R> me = this;
              return new F1<P1, R>() {
                  @Override
                  public R apply(P1 p1) {
                      R r = me.apply(p1);
                      for (Function<? super P1, ? extends R> f : afters) {
                          r = f.apply(p1);
                      }
                      return r;
                  }
              };
          }
docs: Returns a composed function that applied, in sequence, this function and
  all functions specified one by one. If applying anyone of the functions
  throws an exception, it is relayed to the caller of the composed function.
  If an exception is thrown out, the following functions will not be applied.
  <p>When apply the composed function, the result of the last function
  is returned</p>
  
  @param afters
  a sequence of function to be applied after this function
  @return a composed function