code: public F5<P1, P2, P3, P4, P5, R> andThen(
                  final Func5<? super P1, ? super P2, ? super P3, ? super P4, ? super P5, ? extends R>... fs
          ) {
              if (0 == fs.length) {
                  return this;
              }
  
              final F5<P1, P2, P3, P4, P5, R> me = this;
              return new F5<P1, P2, P3, P4, P5, R>() {
                  @Override
                  public R apply(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) {
                      R r = me.apply(p1, p2, p3, p4, p5);
                      for (Func5<? super P1, ? super P2, ? super P3, ? super P4, ? super P5, ? extends R> f : fs) {
                          r = f.apply(p1, p2, p3, p4, p5);
                      }
                      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 fs
  a sequence of function to be applied after this function
  @return a composed function