/**
  * Combines two combinations into one by merging the the two combinations' {@link
  * Combination.Key}s and adding the payloads together.
  *
  * @param left Left combination.
  * @param right Right combination.
  */
 public Combination(final Combination<P> left, final Combination<P> right) {
   ValidateAs.notNull(left, "left");
   ValidateAs.notNull(right, "right");
   this.key = new Key(left.getKey(), right.getKey());
   this.payload = left.payload.add(right.payload);
   if (this.payload == null) {
     throw new IllegalStateException(
         left.payload.getClass().getName() + ".add(rhs) cannot return null.");
   }
 }
 public Combination(final int index, final P payload) {
   this.key = new Key(index);
   this.payload = ValidateAs.notNull(payload, "payload");
 }