管道按什麼順序處理流中的元素,取決於流的串並行、流的資料來源、以及中間操作。
摘自官網的典型示例如下,用foreach方法列印乙個arraylist例項的元素的幾種情況:
integer intarray = ;
listlistofintegers =
new arraylist<>(arrays.aslist(intarray));
system.out.println("listofintegers:");
listofintegers
.stream()
.foreach(e -> system.out.print(e + " "));
system.out.println("");
system.out.println("listofintegers sorted in reverse order:");
comparatornormal = integer::compare;
comparatorreversed = normal.reversed();
collections.sort(listofintegers, reversed);
listofintegers
.stream()
.foreach(e -> system.out.print(e + " "));
system.out.println("");
system.out.println("parallel stream");
listofintegers
.parallelstream()
.foreach(e -> system.out.print(e + " "));
system.out.println("");
system.out.println("another parallel stream:");
listofintegers
.parallelstream()
.foreach(e -> system.out.print(e + " "));
system.out.println("");
system.out.println("with foreachordered:");
listofintegers
.parallelstream()
.foreachordered(e -> system.out.print(e + " "));
system.out.println("");
執行結果:
listofintegers:
1 2 3 4 5 6 7 8
listofintegers sorted in reverse order:
8 7 6 5 4 3 2 1
parallel stream:
3 4 1 6 2 5 7 8
another parallel stream:
6 3 1 5 7 8 4 2
with foreachordered:
8 7 6 5 4 3 2 1
流的元素的執行順序,取決於流的串並行、流的資料來源、以及中間操作:
1、資料來源:如果資料來源本身是無序的,那麼討論元素的執行順序就沒有意義;
2、對於序列的流,其資料來源是有序的,如果中間操作中沒有排序之類的影響順序的操作,那麼在最終操作中處理元素的順序,和資料來源中元素的順序就是一致的;如果中間操作中有排序之類的操作,那麼在最終操作中處理元素的順序,和依次執行各個中間操作之後的元素順序,是一致的。
3、對於並行的流,其資料來源是有序的,但是其最終操作中處理元素的順序依然是隨機的;但是並行流可以通過foreachordered保證執行順序和資料來源中元素的順序一致。
Java8 Stream經典示例
示例一 class user public int getid public string tostring 現在有乙個list的集合,如何把這個list轉換成map其中,key是user id,value是user物件 如下 listusers arrays.aslist new user 1,t...
Java8 Stream 中間操作
1 filter 過濾,接收lambda,從流中排除某些元素 內部迭代 迭代操作有stream api完成 test public void test1 終止操作 一次性執行全部內容 stream.foreach system.out println 外部迭代 test public void te...
java8 stream的collect 三個引數
collect方法有兩個過載 第乙個接收的是collector型別的,可以直接用collectors這類工具傳方法引用。第二個接收的是三個引數的,supplier 乙個能創造目標型別例項的方法。accumulator 乙個將當元素新增到目標中的方法。combiner 乙個將中間狀態的多個結果整合到一...