### Question:
Choice { public Choice<T> or(final Choice<T> other) { checkNotNull(other); if (other == none()) { return this; } else { final 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); } }; } } private  Choice(); @SuppressWarnings("unchecked") static Choice<T> none(); static Choice<T> of(final T t); static Choice<T> condition(boolean condition, T t); static Choice<T> fromOptional(Optional<T> optional); static Choice<T> from(final Collection<T> choices); static Choice<T> any(final Collection<Choice<T>> choices); @Override String toString(); Optional<T> first(); Choice<R> thenChoose(final Function<? super T, Choice<R>> function); Choice<R> thenOption(final Function<? super T, Optional<R>> function); Choice<R> transform(final Function<? super T, R> function); Choice<T> or(final Choice<T> other); Choice<T> condition(boolean condition); Choice<T> condition(final Predicate<? super T> predicate);  }### Answer:
@Test public void testOr() { assertThat(Choice.of(2).or(Choice.from(ImmutableList.of(1, 3))).asIterable()) .containsExactly(2, 1, 3) .inOrder(); }