【Java 8 新特性】Java Stream.of()用法


本頁將介紹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 generateA = Stream.generate(new Supplier () {
@Override
public Double get() {
return java.lang.Math.random();
}
});

Stream generateB = Stream.generate(()-> java.lang.Math.random());
Stream generateC = Stream.generate(java.lang.Math::random);

以上三種形式達到的效果是一樣的,只不過是下面的兩個采用了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里面不包含元素項。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM