1. 程式人生 > >Core java for impatient 筆記 ch8 流

Core java for impatient 筆記 ch8 流

array 平均值 提高效率 讀取字符串 emp parallel 流操作 new distinct

流stream 使用了數據視圖,讓你可以在比集合更高的概念上指定操作
使用流,你只需要將操作的調度留給實現,例如,假設你要計算某個屬性的平均值,你只需要
指定數據源和屬性,然後流類庫會優化計算,比如使用多線程來求和,計數,合並結果
1.叠代器使用了一種明確的遍歷策略,同時也阻止了高效的並發執行.
2.你可以從集合,數組,生成器和叠代器創建流
3.使用filter來選擇元素,使用map元素轉換
4.對於轉換劉的其他操作,limit,distinct,sorted
5.從stream中獲得結果使用歸約操作
6.Optional 類型是作為處理Null值而提供的一個安全替代者
7.Collectors類的groupingBy方法和partitioningBy方法允許你把stream分組來求解
8.並行流自動將流操作並行化


8.1從叠代到stream操作
當你處理集合的時候通常會叠代所有元素並且對每一個元素進行處理,使用流操作可以提高效率並行處理,遵循“做什麽”而不限制怎樣做,提供了誠信優化提高效率的機會
流表面上看起來和集合相似,然而:
1.流不存儲元素,他們存儲在底層的集合或者按需求生成
2.流操作不改變他們的源數據
3.如果可能的話,stream操作是延時執行的,也就是說直到需要結果的時候,方法才會執行,如果你要找到前五個長單詞,那麽stream會在找到第五個之後自動停止執行,所以你可以擁有一個無窮流!
//讀取字符串
String contents = new String(Files.readAllBytes(Paths.get("alice.txt")),StandardCharsets.UTF_8);
List<String> words = Arrays.asList(contents.split("\PL+"));
//
long count = words.parallelStream().filter(w -> w.length() > 12).count());

8.2創建stream
集合->利用collection接口的stream方法
數組->利用靜態方法Stream.of

可以創建空流
Stream<String> ec = Stream.empty();

可以創建生成器函數
Stream<String> silence = Stream.generate(Math::random);
可以創建序列
Stream<BigInterger> integers = Stream.iterate(BigInterger.ZERO,n -> n.add(BigInteger.ONE));

8.3
filter 檢查刪除流元素
map 作用於每一個流中的元素

8.4
提取子流和組合流
limit(n) 返回包含n個元素的新流
skip(n) 丟棄前n個元素


簡單規約:如何從流數據中獲得答案
count方法
max
anyMatch 如果有滿足條件返回true
min
Optional 類型是一種更好的表明缺少返回值的方式(和auto 差不多?)

Core java for impatient 筆記 ch8 流