9 Eylül 2022 Cuma

Stream.geneate metodu - Sonsuz Bir Stream Yaratır

Giriş
1. generate()  metodu elimizde bir Collection, dizi yok iken Stream yaratmak için kullanılır. 
2. Bu metod sonsuz bir Stream yarattığı için limit() ile sınırlandırmak gerekir.

Örnek
Elimizde şöyle bir kod olsun.
Stream.generate(() -> {
    System.out.println("generating...");
    return "hello!";
})
.limit(3)
.forEach(elem -> {
    System.out.println(elem);
});
Çıktı olarak şunu alırız.
generating...
hello!
generating...
hello!
generating...
hello!
Örnek
Şöyle yaparız
Stream.generate(() -> Boolean.FALSE).limit(100)
Örnek - Test Amaçlı Kullanım
Testlerde sahte veri üretmek için şöyle yaparız. Burada limit() ile sınırlama yok
private static void streamGenerate(){
  Supplier<UUID> supplier = () -> UUID.randomUUID();
  Stream<UUID> generate = Stream.generate(supplier);
  generate.forEach(a-> System.out.println(a));
}

private static void streamMessage(){
  AtomicInteger atomicInteger = new AtomicInteger();
  Supplier<Message> supplier = () -> {
    Message message = new Message(new Random().nextInt(), "Message : " +
      atomicInteger.getAndIncrement());
    return message;
  };

  Stream.generate(supplier)
    .forEach(a-> System.out.println("Message Published: " +a.toString()));
}

private static void streamMailId(long size) {
  List<String> domain = List.of("@gmail.com", "@Yahoo.com", "@outlook.com");

  Supplier<String> supplier = () ->{
    String userName = generateUserName();
    Random random = new Random();
    int index = random.nextInt(domain.size());
    return userName+domain.get(index);
  };

  Stream.generate(supplier).limit(size).forEach(a-> System.out.println(a));
}

Hiç yorum yok:

Yorum Gönder