İmzası şöyle. Sonsuz bir Stream yaratır. limit() ile sınırlamak gerekir
public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
Açıklaması şöyle. Belirtilen seed değerinden başlar ve unary operator ile seed değeri değiştirilir.
Örnek
Şöyle yaparız.
Şöyle yaparız.
İmzası şöyle. Predicate ile sınırlanan bir Stream yaratır.
Stream iterate(T seed, UnaryOperator<T> f) creates an infinite Stream from iterative application of a function f to an initial element seed.Bu metod recursive (özyinelemeli veya kendi kendini çağıran) metodların veya döngülerin metodların yerine geçebilir. Bu metod sonsıuz bir Stream yarattığı için limit() ile sınırlandırmak gerekir.
Örnek
Şöyle yaparız.
DoubleStream.iterate(1.0,term -> term*2)
.limit(n).sum();
ÖrnekŞöyle yaparız.
Stream.iterate('a', i -> (char)(i + 1)).limit(26).forEach(System.out::println);
iterate metodu - seed + predicate + unary operatorİmzası şöyle. Predicate ile sınırlanan bir Stream yaratır.
public static<T> Stream<T> iterate(T seed, Predicate<? super T> hasNext,
UnaryOperator<T> next)
Java 9 ile geliyor. Belirtilen seed değerinden başlar ve predicate true olduğu müddetçe unary operator ile seed değeri değiştirilir.
Örnek
Şöyle yaparız.
Belirtilen karakterlerin String içindeki indeksini bulmak için şöyle yaparız.
Şöyle yaparız.
Stream.iterate(exception, Objects::nonNull, Throwable::getCause);
Şu kod ile aynıdır.Stream.iterate(exception, Throwable::getCause)
.takeWhile(Objects::nonNull)
ÖrnekBelirtilen karakterlerin String içindeki indeksini bulmak için şöyle yaparız.
List<Integer> getIndexList(String word, char c) {
return IntStream
.iterate(word.indexOf(c),
index -> index >= 0,//Predicate
index -> word.indexOf(c, index + 1))
.boxed()
.collect(Collectors.toList());
}