2021-04-09閱讀小筆記:JDK8中的一等公民和Stream小概念

1 一等公民和二等公民

在 jdk8之前,只有值(基本類型和實例引用)是一等公民,可以作爲方法參數傳遞,而類和方法等是作爲二等公民,不能作爲方法的傳參。 jdk8中,方法也可以作爲一等公民傳遞,即方法(函數)可以作爲方法參數傳遞,這稱爲函數式編程,而我們一般利用匿名函數(lambda表達式)作爲方法傳參的使用方式。

傳遞方法的最大的優勢是,方法可以抽象封裝到行爲級別。

在 jdk8 之前,例如我讓機器人做一件事,那麼就只能調用指定的一個方法:例如購物就是shopping(String something),取包裹就是fetchPackage(String orderNum);但是在 jdk8 之後,我可以將行爲傳遞到方法中,doSomeThing(行爲),機器人直接根據行爲去一步一步執行就好。

代碼例子

/**
 * 機器人Demo
 * @author winfun
 * @date 2021/4/8 10:33 上午
 **/
public class RobotDemo {

    public static void shopping(String someThing){
        System.out.println("調用shopping方法,讓機器人購物,購買: "+someThing);
    }

    public static void fetchPackage(String orderNum){
        System.out.println("調用fetchPackage方法,讓機器人取快遞,快遞單號: "+orderNum);
    }

    public static void doSomeThing(String param,Consumer<String> consumer){
        System.out.print("調用doSomeThing方法,");consumer.accept(param);
    }

    public static void main(String[] args) {
        System.out.println("jdk8 之前,機器人幹活。。。。");
        shopping("蘋果");
        shopping("香蕉");
        fetchPackage("order123");
        fetchPackage("order234");

        System.out.println("jdk8 後,機器人幹活");
        doSomeThing("蘋果",v->System.out.println("讓機器人購物,購買:"+v));
        doSomeThing("香蕉",v->System.out.println("讓機器人購物,購買:"+v));
        doSomeThing("order123",v->System.out.println("讓機器人取快遞,快遞單號: "+v));
        doSomeThing("order234",v->System.out.println("讓機器人取快遞,快遞單號: "+v));
    }
}

2 Stream 和 Collection 的關係

Collection 是存儲數據的地方,我們可以遍歷集合來對集合中的數據做進一步的操作。

Stream 是對 Collection的操作,允許我們以聲明性方式處理數據集合,Stream 在提供的方法內部都做了實現;你可以把它們看成遍歷數據集的高級迭代器(內部迭代,而上面的遍歷集合是外部迭代)。

此外,流還可以透明地並行處理,你無需寫任何多線程代碼了!

Stream 提供的操作類型

Stream 接口定義了許多操作,分爲兩類:中間操作和終端操作,

中間操作會返回另外一個流,除非流水線上觸發一個終端操作,否則中間操作不會執行任何處理——它們很懶。
在這裏插入圖片描述
終端操作會從流的流水線生成結果。其結果是任何不是流的值,比如List、Integer,甚至void。

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