在Java 8中,我們可以使用Stream.iterate創建流值,即所謂的無限流。
1.1 0 – 9流
//Stream.iterate(initial value, next value) Stream.iterate(0, n -> n + 1) .limit(10) .forEach(x -> System.out.println(x));輸出量
0
1
2
3
4
5
6
7
8
9
1.2僅奇數流。
Stream.iterate(0, n -> n + 1) .filter(x -> x % 2 != 0) //odd .limit(10) .forEach(x -> System.out.println(x));
輸出量
1
3
5
7
9
11
13
15
17
19
1.3一個經典的斐波那契例子。
Stream.iterate(new int[]{0, 1}, n -> new int[]{n[1], n[0] + n[1]}) .limit(20) .map(n -> n[0]) .forEach(x -> System.out.println(x));輸出量
011235813213455891442333776109871597258441811.4將所有斐波那契值相加。
int sum = Stream.iterate(new int[]{0, 1}, n -> new int[]{n[1], n[0] + n[1]}) .limit(10) .map(n -> n[0]) // Stream<Integer> .mapToInt(n -> n) .sum();
System.out.println("Fibonacci 10 sum : " + sum)輸出量
2. Java 9Java 9中對stream.iterate進行了增強。它支持謂詞(條件)作為第二個參數,並且如果謂詞為false, stream.iterate將停止。
2.1如果n >= 20則停止流迭代
Stream.iterate(1, n -> n < 20 , n -> n * 2) .forEach(x -> System.out.println(x));
1
2
4
8
16
參考文獻Oracle文檔– Java Stream迭代
翻譯自: https://mkyong.com/java8/java-8-stream-iterate-examples/
今日福利👇
推薦閱讀--