İlkel Tür Akışları Üretme
iterate ve generate
İlkel Tür Akışları Üretme, 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ın Sınırlara İhtiyacı Vardır
iterate ve generate, potansiyel olarak sonsuz akışlar oluşturur. Bunları sonlu hâle getirmek için limit (veya bir koşul) eklemelisiniz.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.iterate(1, n -> n + 1)
.limit(5)
.forEach(System.out::println);
}
}Başlangıç değeriyle iterate
iterate(seed, next), başlangıç değerinden başlar ve işlevi önceki değere art arda uygular.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.iterate(2, n -> n * 2)
.limit(5)
.forEach(System.out::println);
}
}Koşulla iterate
Üç bağımsız değişken alan iterate(seed, hasNext, next), koşul false olduğunda işlevsel bir döngü gibi otomatik olarak durur.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.iterate(1, n -> n <= 100, n -> n * 3)
.forEach(System.out::println);
}
}Sağlayıcıyla generate
generate, her öğeyi önceki değere bağlı olmadan bağımsız şekilde üreten bir IntSupplier alır.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
IntStream.generate(() -> 7)
.limit(3)
.forEach(System.out::println);
}
}Rastgele Sayılar Üretme
Bir generate sağlayıcısı rastgele bir kaynağı çağırabilir. Burada her öğe, bağımsız bir zar atışıdır.
import java.util.Random;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
Random rnd = new Random(42);
IntStream.generate(() -> rnd.nextInt(6) + 1)
.limit(5)
.forEach(System.out::println);
}
}iterate ve generate karşılaştırması
Temel fark:
iterate: her değer önceki değerden türetilir (diziler).generate: her değer bağımsız olarak üretilir (sabitler, rastgele değerler).
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int sum = IntStream.iterate(1, n -> n + 1).limit(10).sum();
System.out.println(sum);
}
}Üretilen Akışları Toplama
Sınırlandırıldıktan sonra üretilen akışlar, tüm standart toplulaştırma işlemlerini destekler.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
long count = IntStream.iterate(0, n -> n + 2)
.limit(50)
.filter(n -> n % 3 == 0)
.count();
System.out.println(count);
}
}Object Stream üzerinde iterate ile Fibonacci
Fibonacci gibi durum taşıyan diziler için bir dizi çifti üzerinde Stream.iterate kullanın, ardından değeri tekrar int türüne dönüştürün.
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream.iterate(new int[]{0, 1}, p -> new int[]{p[1], p[0] + p[1]})
.limit(8)
.mapToInt(p -> p[0])
.forEach(System.out::println);
}
}Üreticiden Dizi Oluşturma
Yordamsal olarak ilkel türde bir dizi oluşturmak için bir üreticiyi toArray ile birleştirin.
import java.util.Arrays;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int[] squares = IntStream.iterate(1, n -> n + 1)
.limit(5)
.map(n -> n * n)
.toArray();
System.out.println(Arrays.toString(squares));
}
}Tembellik İş Yükünü Azaltır
Akışlar tembel değerlendirilir: limit kullanıldığında, sonsuz bir kaynaktan bile yalnızca gerekli öğeler üretilir.
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
int first = IntStream.iterate(10, n -> n + 10)
.filter(n -> n > 25)
.findFirst()
.getAsInt();
System.out.println(first);
}
}Koşul Biçimini Tercih Edin
Koşul tabanlı iterate, durma koşulunu üretim mantığıyla birlikte tuttuğu için çoğu zaman iterate(...).limit(...) biçiminden daha anlaşılırdır.
import java.util.stream.LongStream;
public class Main {
public static void main(String[] args) {
long product = LongStream.iterate(1, n -> n <= 5, n -> n + 1)
.reduce(1, (a, b) -> a * b);
System.out.println(product);
}
}Hızlı Kontrol
generate çağrısını limit olmadan yapıp ardından forEach gibi bir sonlandırıcı işlem çağırırsanız ne olur?
Özet
İlkel türde akışlar ürettiniz:
iterate, her değeri önceki değerden türetir.generate, değerleri bir sağlayıcıdan bağımsız olarak üretir.- Her ikisi de sonsuzdur; bunları
limitveyaiterateyönteminin koşul biçimiyle sınırlandırın. - Tembel değerlendirme, yalnızca gerekli öğelerin hesaplanmasını sağlar.
Sıkça Sorulan Sorular
“İlkel Tür Akışları Üretme” dersi ücretsiz mi?
Evet — “İlkel Tür Akışları Üretme” 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.
“İlkel Tür Akışları Üretme” dersinde ne öğreneceğim?
iterate ve generate 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.
“İlkel Tür Akışları Üretme” 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
- IntStream ve LongStream
- Aralık ve Birleştirme İşlemleri
- Nesne Akışlarına ve Nesne Akışlarından Eşleme
- İlkel Tür Akışları Üretme