Returns an iterable whose iterators cycle indefinitely over the elements of {@code iterable}. <p>That iterator supports {@code remove()} if {@code iterable.iterator()} does. After {@code remove()} is called, subsequent cycles omit the removed element, which is no longer in {@code iterable}. The ite
(Iterable<T> iterable)
| 372 | * Stream.generate(() -> iterable).flatMap(Streams::stream)}. |
| 373 | */ |
| 374 | public static <T extends @Nullable Object> Iterable<T> cycle(Iterable<T> iterable) { |
| 375 | checkNotNull(iterable); |
| 376 | return new FluentIterable<T>() { |
| 377 | @Override |
| 378 | public Iterator<T> iterator() { |
| 379 | return Iterators.cycle(iterable); |
| 380 | } |
| 381 | |
| 382 | @Override |
| 383 | public Spliterator<T> spliterator() { |
| 384 | return Stream.generate(() -> iterable).<T>flatMap(Streams::stream).spliterator(); |
| 385 | } |
| 386 | |
| 387 | @Override |
| 388 | public String toString() { |
| 389 | return iterable.toString() + " (cycled)"; |
| 390 | } |
| 391 | }; |
| 392 | } |
| 393 | |
| 394 | /** |
| 395 | * Returns an iterable whose iterators cycle indefinitely over the provided elements. |