Odpowiedzi:
Zwróć uwagę, jak różnią się ich podpisy:
generatebierze a IntSupplier, co oznacza, że powinieneś generować ints bez niczego. Przykładowe zastosowania obejmują tworzenie stałego strumienia tej samej liczby całkowitej, tworzenie strumienia losowych liczb całkowitych. Zauważ, że każdy element w strumieniu nie zależy od poprzedniego elementu.
iterateprzyjmuje a seedi a IntUnaryOperator, co oznacza, że należy wygenerować każdy element na podstawie poprzedniego elementu . Jest to przydatne na przykład do utworzenia sekwencji zdefiniowanej indukcyjnie. W takim przypadku każdy element powinien zależeć od poprzedniego .
IntStream.iteratezwraca uporządkowane,IntStream z drugiej strony IntStream.generatezwraca nieuporządkowane,IntStream co może pomóc w przyspieszeniu potoków równoległego strumienia.
IntStream.generate są preferowane do generowania losowych lub stałych wartości, jak określono w Javadoc, domyślam się, że najbardziej prawdopodobne są cechy zwróconego strumienia.
Oprócz zamówienia, również użycie jest nieco inne. Spójrzmy na podpisy metod:
iterate(int seed, IntUnaryOperator f)generate(IntSupplier s)Iterate wyraźnie podało wartość początkową jako parametr i jednoargumentowy operator, który służy do generowania następnej wartości z poprzedniej. Tutaj operator może łatwo zostać niezmienny bez stanu wewnętrznego i może być ponownie używany w wielu miejscach równolegle bez żadnych problemów.
Generuj wykorzystuje dostawcę. Mogą one zapewniać stałe lub losowe liczby lub muszą mieć stan wewnętrzny, aby zapewnić szereg taki jak (1, 2, 3, ...).