code: @SuppressWarnings("unchecked")
      public static <T> Stream<T> create(final Iterable<? extends T> iterable) {
          if (iterable instanceof Stream) {
              return (Stream<T>) iterable;
          } else if (iterable instanceof ImmutableCollection<?>
                  && ((ImmutableCollection<? extends T>) iterable).isEmpty()) {
              return new EmptyStream<T>();
          } else {
              return new IterableStream<T>(iterable);
          }
      }
docs: Creates a new Stream over the elements of the supplied {@code Iterable}. If the supplied
  {@code Iterable} is a {@code Stream}, it will be returned unchanged. If the supplied
  {@code Iterable} implements {@code Closeable}, method {@link Closeable#close()} will be
  called when the {@code Stream} is closed.
  
  @param iterable
  an {@code Iterable} of non-null elements, possibly empty but not null
  @param <T>
  the type of element
  @return a {@code Stream} over the elements in the {@code Iterable}