Java8系列--Java Stream入門篇(什麼是Stream)

1 知識框架

  先上一張圖來說明一下Java8中”流”的引進、意義和優勢。
stream1

2 傳統Java集合的不足

2.1 傳統Java集合

  集合是Java中用途十分廣泛的一個集合,正是因爲它對於數據的處理的優勢,幾乎任何一個Java應用程序都會設計對Java集合的製造和處理。
  然而,一個傳統的Java集合僅僅是對Java集合內部的數據進行簡單的添加、刪除等操作,而且處理的數據類型有限。
   當涉及到複雜的業務邏輯處理時,需要藉助大量的迭代器才能完成需求,操作繁瑣,工作量大。

2.2 聲明式操作

  我們熟悉的數據庫SQL操作。例如:

  SELECT name FROM users WHERE age < 30

  上面的SQL查詢語句可以選出年齡小於30歲的用戶的用戶名。
在這裏,我們只需要顯式地聲明我們的需求”選出年齡小於30歲的用戶的用戶名”就可以了,而不需要考慮如何實現。
  那麼,Java集合如何實現這種顯式的聲明操作呢?

3 流是什麼

3.1 實例講解

  下面以一個實例展開講解,來更好地認識什麼是”流”。
  現在這裏有若干鵝卵石,顏色、質量不等。
鵝卵石

3.1.1 需求

1.挑選出質量小於500g的鵝卵石,並2.按照質量從大到小的順序將它們排成一條線。

3.1.2 Java7(集合)實現

1.使用迭代器篩選元素

List<Stone> stoneList = new ArrayList<Stone>();
        for (Stone s : stoneLine) {
            if (s.getWeight() < 500) {
                stoneList.add(s);
            }
        }

2.使用匿名類對鵝卵石進行質量排序(從大到小)

Collections.sort(stoneList, new Comparator<Stone>() {
            public int compare(Stone s1, Stone s2) {
                return Integer.compare(s1.getWeight(), s2.getWeight());
            }
        });

3.將派好序的鵝卵石排成一條線(放到一起)

List<String> lastStoneList = new ArrayList<Stone>();
        for (Stone s : stoneList) {
            lastStoneList.add(s.getName());
        }
    }

3.1.3 Java8(Stream)實現

List<String> lastStoneList = 
                stoneLine.stream()
                .filter(s -> s.getWeight() < 500)//挑選出質量小於500g的鵝卵石
                .sorted(comparing(Stone::getWeight))//按照質量進行排序
                .map(Stone::getName)//提取滿足要求的鵝卵石的名字
                .collect(toList());//將名字保存到List中

3.2 什麼是流

  流,是一系列數據項,它不是一種數據結構。
  流可以進行相關的算法和計算,只是它並沒有顯式地表現,而是在內部進行隱式地操作。

4 流的優勢

  流,解決了兩個問題,1.直接實現你”想要什麼”,2.可以進行並行處理。
  流,的本質,集合Lambda表達式,對傳統Java集合的功能強化。
  Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)。Stream API 藉助於同樣新出現的 Lambda 表達式,極大的提高編程效率和程序可讀性。同時它提供串行和並行兩種模式進行匯聚操作,併發模式能夠充分利用多核處理器的優勢,使用 fork/join 並行方式來拆分任務和加速處理過程。通常編寫並行代碼很難而且容易出錯, 但使用 Stream API 無需編寫一行多線程的代碼,就可以很方便地寫出高性能的併發程序。所以說,Java 8 中首次出現的 java.util.stream 是一個函數式語言+多核時代綜合影響的產物。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章