IntStream.iterate的簡單使用
注意:IntStream
是jdk1.8新增的一個接口,iterate
是他的一個靜態實現方法(注意jdk1.8開始,接口中的default方法或者static方法可以定義方法體,而不是隻能定義抽象方法了,上面的IntStream接口就是。)
看他的方法介紹:
Returns an infinite sequential ordered IntStream produced by iterative application of a function f to an initial element seed, producing a Stream consisting of seed, f(seed), f(f(seed)), etc.
大意:通過迭代函數,生成一個有序無限的Int數據流。(由於是無限流,一般都是配合limit來使用)。
我們來看一個使用案例:
IntStream.iterate(2, n -> n * 3).limit(10).forEach(System.out::println);
// 返回
2
6
18
54
162
486
1458
4374
13122
39366
這個例子是首項爲2,等比數列公比爲3的一個等比數列,取前10項打印輸出。
看下這個方法的參數iterate(int seed, IntUnaryOperator f)
,seed也就是上面案例中的第一個參數2,seed表示種子,你可以理解爲初始值或者首項值(seed的命名方式在jdk中比較常見,比如Random類就定一個類變量seed,來幫助生成隨機數)。IntUnaryOperator
Unary表示一元,這個接口表示一元的int參數的stream表達式類似於x -> ax+b
這種的表達式。