Yanıtlar:
İmzalarının nasıl farklı olduğuna dikkat edin:
generatea alır IntSupplier, yani hiçbir şey verilmeden ints üretmeniz gerekir. Örnek kullanımlar, aynı tamsayıdan sabit bir akış oluşturmayı, rastgele tamsayılardan bir akış oluşturmayı içerir. Akıştaki her öğenin önceki öğeye nasıl bağlı olmadığına dikkat edin.
iteratea seedve a alır IntUnaryOperator, yani her öğeyi önceki öğeye göre oluşturmanız gerekir . Bu, örneğin endüktif olarak tanımlanmış bir dizi oluşturmak için kullanışlıdır. Bu durumda, her öğenin bir öncekine bağlı olması gerekir .
IntStream.iterateÖte yandan sıralıIntStream bir değer IntStream.generatedöndürür, paralel akış boru hatlarını hızlandırmaya yardımcı olabilecek sırasızIntStream bir değer döndürür .
IntStream.generate Javadoc'ta belirtildiği gibi rastgele veya sabit değerler üretmek için tercih edilirse, büyük olasılıkla döndürülen akımın özellikleri için tahmin ediyorum.
Siparişin yanı sıra, kullanım da biraz farklı. Yöntem imzalarına bakalım:
iterate(int seed, IntUnaryOperator f)generate(IntSupplier s)Iterate, başlangıç değerini bir önceki değerden sonraki değeri oluşturmak için kullanılan parametre ve tekli operatör olarak açıkça verdi. Burada operatör dahili durum olmadan kolayca değiştirilemez ve herhangi bir sorun olmadan paralel olarak birden fazla yerde yeniden kullanılabilir.
Generate tedarikçi kullanır. Bunlar sabit veya rasgele sayılar sağlayabilir veya (1, 2, 3, ...) gibi seriler sağlamak için dahili duruma sahip olmaları gerekir.