iterate ve generate ile Sonsuz Akışlar
Stream.iterate ve Stream.generate ile sonsuz akışlar oluşturun, ardından durdurmak için sınırlandırın veya take-while kullanın.
iterate ve generate ile Sonsuz Akışlar, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
Sonsuz Akışlar Nedir
Java akışları sonsuz olabilir; sonları olmadan isteğe bağlı olarak öğeler üretirler. Sonsuza kadar çalışmayı önlemek için bir sınırlama işlemiyle (limit, takeWhile, findFirst vb.) sonlandırılmaları gerekir.
Stream.iterate: Başlangıç Değerli Diziler
Stream.iterate(seed, f), önceki değere tekrar tekrar f uygulayarak sonsuz bir akış oluşturur. İlk öğe başlangıç değeridir.
// Infinite even numbers: 0, 2, 4, 6, 8, ...
Stream.iterate(0, n -> n + 2)
.limit(10)
.forEach(System.out::println);Koşul İfadeli iterate (Java 9+)
Stream.iterate(seed, predicate, f), koşullu bir for döngüsü gibi bir durma koşulu ekler. Koşul ifadesi yanlış olduğunda akış durur.
// Equivalent to: for (int i = 1; i <= 100; i *= 2)
Stream.iterate(1, n -> n <= 100, n -> n * 2)
.forEach(System.out::println); // 1 2 4 8 16 32 64Stream.generate: Durumsuz Üreteç
Stream.generate(Supplier), her öğe için tedarikçiyi çağırır. Tedarikçi durumsuz olabilir (rastgele sayılar üretirken) veya durum bilgisi taşıyabilir (harici bir sayaç kullanırken).
// Infinite random doubles between 0.0 and 1.0:
Stream.generate(Math::random)
.limit(5)
.forEach(System.out::println);UUID'ler Oluşturma
Toplu ID oluşturma için benzersiz tanımlayıcılardan oluşan bir akış oluşturmak üzere UUID::randomUUID ile birlikte generate kullanın.
List<String> ids = Stream.generate(() -> UUID.randomUUID().toString())
.limit(100)
.collect(Collectors.toList());
System.out.println(ids.size()); // 100iterate ile Fibonacci
Bir çift durum kullanarak Fibonacci sayılarını oluşturun. Java 9'un iki bağımsız değişken alan iterate yöntemi bunu zarif bir şekilde yapmanızı sağlar.
Stream.iterate(new long[]{0, 1}, p -> new long[]{p[1], p[0]+p[1]})
.limit(10)
.map(p -> p[0])
.forEach(System.out::println); // 0 1 1 2 3 5 8 13 21 34takeWhile ve dropWhile (Java 9+)
takeWhile(predicate), koşul ifadesi doğru olduğu sürece öğeleri alır ve ardından durur. dropWhile, koşul ifadesi yanlış olana kadar öğeleri atlar ve ardından kalanları alır.
// takeWhile stops at the first element where predicate is false:
Stream.iterate(1, n -> n + 1)
.takeWhile(n -> n < 10)
.forEach(System.out::println); // 1 2 3 4 5 6 7 8 9Yeniden Deneme Yoklaması için Sonsuz Akışlar
Bir yoklama döngüsünü generate ile modelleyin: sonuçları oluşturun, koşul karşılanana kadar takeWhile kullanın ve ardından ilk başarılı sonucu alın.
Optional<String> result = Stream.generate(() -> checkJobStatus(jobId))
.takeWhile(status -> status.equals("PENDING"))
.findFirst();
// When job completes, takeWhile stops and findFirst gets "DONE"IntStream.range ve rangeClosed
Sonlu tamsayı dizileri için IntStream.range(start, end) ve rangeClosed(start, end), iterate işleminden daha verimlidir.
// Sum 1 to 1000:
int sum = IntStream.rangeClosed(1, 1000).sum();
System.out.println(sum); // 500500Long Dizileri için LongStream.iterate
Stream<Long> kullanımındaki otomatik kutulama ek yükünden kaçınmak için long dizilerinde LongStream.iterate kullanın.
long sumOfPrimes = LongStream.iterate(2, n -> n + 1)
.filter(n -> isPrime(n))
.limit(1000)
.sum();Sonsuz Akışlar Tembel Değerlendirilir
Sonsuz akışlar öğeleri önceden hesaplamaz. Her öğe yalnızca sonlandırıcı işlem onu istediğinde oluşturulur. Bu tembel değerlendirme, sonsuz akışları pratik hâle getirir.
Hızlı Kontrol
Sonsuz bir akışla çalışırken hangi durdurma mekanizması gereklidir?
Özet
Diziler için iterate(seed, f), bağımsız öğe üretimi için generate(supplier) kullanın. Her zaman kısa devre yapan bir sonlandırıcı işlem (limit, takeWhile, findFirst) ekleyin. Sonsuz akışlar tembel değerlendirilir; yalnızca istendiğinde somutlaştırılır.
Sıkça Sorulan Sorular
“iterate ve generate ile Sonsuz Akışlar” dersi ücretsiz mi?
Evet — “iterate ve generate ile Sonsuz Akışlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“iterate ve generate ile Sonsuz Akışlar” dersinde ne öğreneceğim?
Stream.iterate ve Stream.generate ile sonsuz akışlar oluşturun, ardından durdurmak için sınırlandırın veya take-while kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“iterate ve generate ile Sonsuz Akışlar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İç İçe Koleksiyonlar için flatMap
- Paralel Akışlar: Performans ve Tuzaklar
- Spliterator: Paralellik için Bölme
- iterate ve generate ile Sonsuz Akışlar