
1. 流
1.1. 以宣告性方式處理資料集合
1.2. 通過查詢陳述句來表達,而不是臨時撰寫一個實作
1.3. 遍歷資料集的高級迭代器
1.4. 透明地并行處理
1.5. 從支持資料處理操作的源生成的元素序列
1.5.1. 元素序列
1.5.1.1. 從有序集合生成流時會保留原有的順序
1.5.2. 流的目的在于表達計算
1.5.3. 流會使用一個提供資料的源
1.5.3.1. 集合
1.5.3.2. 陣列
1.5.3.3. I/O資源
1.5.4. 流的資料處理功能支持類似于資料庫的操作
1.5.4.1. 順序執行
1.5.4.2. 并行執行
1.6. 特點
1.6.1. 流水線
1.6.1.1. 延遲
1.6.1.2. 短路
1.6.2. 內部迭代
1.6.2.1. 流的迭代操作是在后臺進行的
1.7. 只能遍歷一次
1.8. 元素是按需計算的
1.9. 在概念上固定的資料結構
1.10. 在時間中分布的一組值
1.11. 延遲創建的
2. 集合
2.1. 急切創建的
2.2. 空間(這里就是計算機記憶體)中分布的一組值
2.3. 在一個時間點上全體存在
2.4. 一個記憶體中的資料結構
2.5. 包含資料結構中目前所有的值
2.6. 集合中的每個元素都得先算出來才能添加到集合中
3. 有序
3.1. 是按順序取值,而不是隨機取用
4. 外部迭代
4.1. for-each結構是一個語法糖
4.1.1. 背后用Iterator物件表達
4.2. 自己管理所有的并行問題
4.3. 
5. 內部迭代
5.1. Stream
5.2. 
6. 流操作
6.1. 中間操作
6.1.1. 可以連接起來的流操作
6.2. 終端操作
6.2.1. 關閉流的操作
6.2.2. 從流的流水線生成結果,其結果是任何不是流的值
7. 流的使用
7.1. 一個資料源(如集合)來執行一個查詢
7.2. 一個中間操作鏈,形成一條流的流水線
7.3. 一個終端操作,執行流水線,并能生成結果
8. 高層次構件
8.1. filter
8.2. sorted
8.3. map
8.4. collect
9. Stream API
9.1. 宣告性——更簡潔,更易讀
9.2. 可復合——更靈活
9.3. 可并行——性能更好
10. Optional類
10.1. java.util.Optional
10.2. 容器類
10.3. 代表一個值存在或不存在
10.4. isPresent()
10.4.1. 將在Optional包含值的時候回傳true,否則回傳false
10.5. ifPresent(Consumer block)
10.5.1. 會在值存在的時候執行給定的代碼塊
10.6. T get()
10.6.1. 在值存在時回傳值,否則拋出一個NoSuchElement例外
10.7. T orElse(T other)
10.7.1. 在值存在時回傳值,否則回傳一個默認值
11. 使用流
11.1. 篩選
11.1.1. filter
11.1.1.1. 用謂詞篩選,篩選出各不相同的元素
11.1.2. distinct
11.1.2.1. 回傳一個元素各異(根據流所生成元素的hashCode和equals方法實作)的流
11.1.3. toSet()
11.2. 切片
11.2.1. Java 9
11.2.2. takeWhile
11.2.2.1. 在遭遇第一個不符合要求的元素時停止處理
11.2.3. dropWhile
11.2.3.1. 一旦遭遇謂詞計算的結果為true,它就停止處理,并回傳所有剩余的元素
11.2.3.2. 一個由無限數量元素構成的流,它也能作業得很好
11.3. 截短
11.3.1. limit(n)
11.3.1.1. 回傳另一個不超過給定長度的流
11.3.1.2. 可以用在無序流上
11.3.1.2.1. 結果不會以任何順序排列
11.3.1.3. 短路
11.3.1.3.1. 只需要創建一個給定大小的流,而用不著處理流中所有的元素
11.4. 跳過
11.4.1. skip(n)
11.5. 互補
11.6. 映射
11.6.1. map
11.6.1.1. 接受一個函式作為引數
11.6.1.2. 函式會被應用到每個元素上
11.6.1.3. 將其映射成一個新的元素
11.6.1.4. 是“創建一個新版本”而不是去“修改”
11.6.2. flatMap
11.6.2.1. 扁平化
11.6.2.2. 一個流中的每個值都換成另一個流,然后把所有的流連接起來成為一個流
11.7. 匹配
11.7.1. anyMatch
11.7.1.1. 流中是否有一個元素能匹配給定的謂詞
11.7.2. allMatch
11.7.2.1. 流中的元素是否都能匹配給定的謂詞
11.7.3. noneMatch
11.7.3.1. 流中沒有任何元素與給定的謂詞匹配
11.7.4. 短路
11.7.4.1. 可以把無限流變成有限流
11.7.4.2. 找到結果就立即停止計算;沒有必要處理整個流
11.8. 查找
11.8.1. findAny
11.8.1.1. 回傳當前流中的任意元素
11.8.1.2. 在使用并行流時限制較少
11.8.1.3. 不關心回傳的元素是哪個時使用
11.8.2. findFirst
11.8.2.1. 出現順序(encounter order)來指定流中專案出現的邏輯順序
11.8.2.2. 找到第一個元素
11.8.2.3. 在并行上限制更多
11.9. 歸約
11.9.1. 折疊(fold)
11.9.2. 將流歸約成一個值
11.9.3. reduce
11.9.3.1. 有初始值版
11.9.3.1.1. 一個初始值
11.9.3.1.2. 一個BinaryOperator來將兩個元素結合起來產生一個新值
11.9.3.2. 無初始值版
11.9.3.2.1. 不接受初始值
11.9.3.2.2. 會回傳一個Optional物件
11.9.4. count
11.9.5. 求和
11.9.5.1. Integer::sum
11.9.6. 最大值
11.9.6.1. Integer::max
11.9.7. 最小值
11.9.7.1. Integer::min
11.10. map-reduce模式
11.10.1. map和reduce的連接
11.10.2. Google用它來進行網路搜索而出名
11.10.3. 很容易并行化
12. 狀態界限
12.1. 無狀態
12.1.1. 沒有內部可變狀態
12.1.2. map
12.1.3. filter
12.2. 有界
12.2.1. 內部狀態很小
12.2.2. reduce
12.2.3. sum
12.2.4. max
12.3. 無界
12.3.1. 需要知道先前的歷史
12.3.2. 存盤要求是無界的
12.3.3. sort
12.3.4. distinct
12.3.5. 有狀態
12.4. 
13. 并行執行的代價
13.1. 傳遞給reduce的Lambda不能更改狀態
13.2. 操作必須滿足結合律才可以按任意順序執行
14. 原始型別流特化
14.1. 特化的原因
14.1.1. 裝箱造成的復雜性
14.1.1.1. 即類似int和Integer之間的效率差異
14.1.2. 并不在于流的復雜性
14.2. IntStream、DoubleStream和LongStream
14.2.1. max
14.2.2. sum
14.2.3. min
14.2.4. average
14.3. mapToInt、mapToDouble和mapToLong
14.4. OptionalInt、OptionalDouble和OptionalLong
14.4.1. Optional原始型別特化版本
14.5. boxed
14.5.1. 轉換回物件流
14.5.2. 在需要將數值范圍裝箱成為一般流
14.6. 數值范圍
14.6.1. range
14.6.1.1. 不包含結束值的
14.6.2. rangeClosed
14.6.2.1. 包含結束值
15. 構建流
15.1. Stream介面通過實作AutoCloseable介面
15.1.1. 資源的管理都由try代碼塊全權負責
15.2. Stream.of
15.2.1. 通過顯式值創建一個流
15.3. Stream.ofNullable
15.3.1. 由可空物件創建流
15.4. Arrays.stream
15.4.1. 從陣列創建一個流
15.5. Files.lines
15.5.1. 由檔案生成流
15.5.2. java.nio.file.Files
15.6. 無限流所包含的元素數量是無限的
15.6.1. 不能對無限流做排序或歸約,因為所有元素都需要處理,而這永遠也完不成
15.6.2. 由函式生成流
15.6.2.1. Stream.iterate
15.6.2.1.1. 使用limit(n)來對這種流加以限制
15.6.2.1.2. takeWhile解決這個問題,它能對流執行短路操作
15.6.2.1.3. 在需要依次生成一系列值的時候
15.6.2.1.4. Java 9對iterate方法進行了增強
15.6.2.1.4.1. 支持謂詞操作
15.6.2.1.5. 純粹不變的:它沒有修改現有狀態,但在每次迭代時會創建新的元組
15.6.2.2. Stream.generate
15.6.2.2.1. 不是依次對每個新生成的值應用函式的
15.6.2.2.2. 接受一個Supplier型別的Lambda提供新的值
15.6.2.2.3. 在并行代碼中使用有狀態的供應源是不安全的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/543172.html
標籤:其他
上一篇:面向物件編程
