Java IntStream yineleme vs ne zaman kullanılır?


19

Görünüşe IntStream.iterategöre sadece hafif bir sipariş versiyonu IntStream.generate. Bu doğru mu? Değilse, temel fark nedir?

Yanıtlar:


21

İ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 .


Bu nedenle, durumu kaydetmeniz gerektiğinde yineleme durumunu kullanın - bu temel farktır. Devleti başka bir yerde saklama ihtiyacı yaratın. Ve yineleme emri verilirken, oluşturma sıra dışıdır, bu da parralizm için uygundur
JJ Beam

8
  1. 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 .

  2. 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.


5

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.