public Choice<T> or(Choice<T> other) {
    checkNotNull(other);
    if (other == none()) {
      return this;
    } else {
      Choice<T> thisChoice = this;
      return new Choice<T>() {
        @Override
        protected Iterator<T> iterator() {
          return Iterators.concat(thisChoice.iterator(), other.iterator());
        }

        @Override
        public String toString() {
          return String.format("%s.or(%s)", thisChoice, other);
        }
      };
    }
  }
@Test
  public void or() {
    assertThat(Choice.of(2).or(Choice.from(ImmutableList.of(1, 3))).asIterable())
        .containsExactly(2, 1, 3)
        .inOrder();
  }