本頁將介紹Java Stream.of方法示例。Stream.of用於為給定元素創建順序流。我們可以傳遞單個元素或多個元素。
查看javadoc中Stream.of方法聲明。
of方法,其生成的Stream是有限長度的,Stream的長度為其內的元素個數。
- of(T... values):返回含有多個T元素的Stream
- of(T t):返回含有一個T元素的Stream
示例:
Stream<Integer> integerStream = Stream.of(1, 2, 3); Stream<String> stringStream = Stream.of("A");
generator
generator方法,返回一個無限長度的Stream,其元素由Supplier接口的提供。在Supplier是一個函數接口,只封裝了一個get()方法,其用來返回任何泛型的值,該結果在不同的時間內,返回的可能相同也可能不相同,沒有特殊的要求。
- generate(Supplier
s):返回一個無限長度的Stream
這種情形通常用於隨機數、常量的 Stream,或者需要前后元素間維持着某種狀態信息的 Stream。
把 Supplier 實例傳遞給 Stream.generate() 生成的 Stream,默認是串行(相對 parallel 而言)但無序的(相對 ordered 而言)。
示例:
Stream
@Override
public Double get() {
return java.lang.Math.random();
}
});
Stream
Stream
以上三種形式達到的效果是一樣的,只不過是下面的兩個采用了Lambda表達式,簡化了代碼,其實際效果就是返回一個隨機值。一般無限長度的Stream會與filter、limit等配合使用,否則Stream會無限制的執行下去,后果可想而知,如果你有興趣,不妨試一下。
iterate
iterate方法,其返回的也是一個無限長度的Stream,與generate方法不同的是,其是通過函數f迭代對給指定的元素種子而產生無限連續有序Stream,其中包含的元素可以認為是:seed,f(seed),f(f(seed))無限循環。
- iterate(T seed, UnaryOperator
f)
示例:
Stream.iterate(1, item -> item + 1)
.limit(10)
.forEach(System.out::println);
// 打印結果:1,2,3,4,5,6,7,8,9,10
上面示例,種子為1,也可認為該Stream的第一個元素,通過f函數來產生第二個元素。接着,第二個元素,作為產生第三個元素的種子,從而產生了第三個元素,以此類推下去。需要主要的是,該Stream也是無限長度的,應該使用filter、limit等來截取Stream,否則會一直循環下去。
empty
empty方法返回一個空的順序Stream,該Stream里面不包含元素項。