code: public static <T> Procedure1<T> andThen(final Procedure1<? super T> before, final Procedure1<? super T> after) {
  		if (after == null)
  			throw new NullPointerException("after");
  		if (before == null)
  			throw new NullPointerException("before");
  		return new Procedures.Procedure1<T>() {
  			@Override
  			public void apply(T p) {
  				before.apply(p);
  				after.apply(p);
  			}
  		};
  	}
docs: Returns a composed {@code Procedure1} that performs, in sequence, the {@code before}
  operation followed by the {@code after} operation. If performing either
  operation throws an exception, it is relayed to the caller of the
  composed operation. If performing the {@code before} operation throws an exception,
  the {@code after} operation will not be performed.
  
  @param <T> the type of input for the {@code before} operation
  @param before the operation to perform first
  @param after the operation to perform afterwards
  @return a composed {@code Procedure1} that performs in sequence the {@code before}
  operation followed by the {@code after} operation
  @throws NullPointerException if {@code before} or {@code after} is null
  @since 2.9