内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

學習筆記——JavaStream源碼學習-創(chuàng)新互聯(lián)

思路

先上一段代碼

目前創(chuàng)新互聯(lián)建站已為超過千家的企業(yè)提供了網(wǎng)站建設、域名、雅安服務器托管、網(wǎng)站改版維護、企業(yè)網(wǎng)站設計、郫都網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
ListuserList = new ArrayList<>();

        for (int i = 0; i< 10; i++) {userList.add(new User(i, "wtq", "1234"));
        }
        userList.stream()
                .filter(user ->user.getUserId() >3)
                .filter(user ->user.getUserId() >4)
                .forEach(System.out::println);

Java的stream流, 平時很常用的功能, 讓代碼變的更簡潔, 可讀性也更好, 但是完全沒有了解過它內(nèi)部的邏輯. 今天有時間自己嘗試梳理了一下源碼, 這也算是我第一次獨立分析源碼, 寫的不好還請見諒.

整體邏輯

先在前面總結一下整套流程的大體邏輯.
在學習stream的使用方法時, 就了解到一些流操作分為中間操作終止操作.中間操作并不會觸發(fā)邏輯執(zhí)行, 真正觸發(fā)操作執(zhí)行是終止操作.
一段流操作中的中間操作在內(nèi)部使用AbstractPipeline被連接成雙向鏈表的結構, 并使用Sink保存具體的操作方式(如上面的過濾邏輯).
直到有一個中間操作對象調(diào)用了終止操作.終止操作需要實現(xiàn)TerminalOpSink. 由終止操作構造Sink調(diào)用單向鏈表. 最終將Sink執(zhí)行鏈委托給Spliterator調(diào)用.
重要的類
AbstractPipeline : 雙向鏈表元素類
Sink : 操作鏈, 串聯(lián)整個流操作中的具體邏輯的類
Spliterator : 真正遍歷調(diào)用操作鏈的類
在這里插入圖片描述
在這里插入圖片描述
這里暫時聽不明白沒關系, 下面正式進入代碼

讀代碼 stream()

從第一個方法開始分析.
在這里插入圖片描述
這個方法構造了最初的Stream對象, 第一個參數(shù)是通過調(diào)用內(nèi)部方法獲取的.先不管這個參數(shù).
在這里插入圖片描述
點進StreamSupport提供的方法, 可以發(fā)現(xiàn)這里的Stream對象的實際類型是ReferencePipeline的內(nèi)部類Head構造了雙向鏈表的頭.

filter() 中間操作

注意, 這里filter()其實是由Head對象調(diào)用的, 注意搞清楚this的值.
這里創(chuàng)建了一個StatelessOp.
在這里插入圖片描述
繼續(xù)追溯構造方法, 實際是調(diào)用了AbstractPipeline的構造方法, 此時構造對象的previousStage就是Head. 同時為previousStagenextStage賦值. 這時候, 雙向鏈表已經(jīng)有了兩個元素.
這里想象一下第二個filter運行時, 會將上一個filter的StatelessOp對象作為previousStage, 執(zhí)行相同的操作. 做完這些操作, 雙向鏈表里加入了第三個元素.
在這里插入圖片描述

foreach() 終止操作

此時終止操作是由最后一個中間操作調(diào)用
這里將終止操作的邏輯保存在ForEachOps對象中
在這里插入圖片描述
在這里插入圖片描述
終止操作調(diào)用最終評估方法, 將全部中間操作構成的鏈表傳入方法
在這里插入圖片描述
繼續(xù)傳遞
在這里插入圖片描述
在這里插入圖片描述構造Sink單向鏈表
在這里插入圖片描述
Sink鏈表傳遞給Spliterator
在這里插入圖片描述
為每個元素調(diào)用Sink操作鏈
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標題:學習筆記——JavaStream源碼學習-創(chuàng)新互聯(lián)
本文來源:http://m.rwnh.cn/article14/dddcge.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航Google、云服務器網(wǎng)站營銷、用戶體驗、網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
盱眙县| 益阳市| 余干县| 庐江县| 凉城县| 疏附县| 沁阳市| 溆浦县| 边坝县| 冕宁县| 达孜县| 双柏县| 建阳市| 乃东县| 思茅市| 满洲里市| 乌拉特中旗| 南开区| 澳门| 玛纳斯县| 徐水县| 潞城市| 方城县| 昌邑市| 上蔡县| 大兴区| 黎城县| 勃利县| 定远县| 安徽省| 甘孜县| 登封市| 苍溪县| 改则县| 凯里市| 富锦市| 运城市| 安康市| 元朗区| 富宁县| 体育|