stream

张碧晨發表於2024-09-26

Stream 入門介紹

使用舉例:  對一組List 中的Apple操作。過濾出weight>130的, 然後根據color屬性進行排序,最後只獲得排序後的color.

不使用stream 寫法:

   List<Apple> lists = Arrays.asList(new Apple("red",130),new Apple("yellow",140),new Apple("green",150));
        List<Apple> highlists = new ArrayList<>();
        //過濾出 weight>130 的APPle
        for(Apple apple : lists){
            if(apple.getWeight()> 130){
                highlists.add(apple);
            }
        }
        //根據color 進行排序
        highlists.sort((d1,d2)->d1.getColor().compareTo(d2.getColor()));
        List<String> nameList  = new ArrayList<>();
        for(Apple apple : highlists){
            nameList.add(apple.getColor());
        }
        System.out.println(nameList);

使用stream 寫法:

 List<String> namelist2 = lists.stream()
                .filter(d -> d.getWeight() > 130) //先過濾
                .sorted(Comparator.comparing(d -> d.getWeight()))// 排序
                // 使用方法推導的模式
       //        .sorted(Comparator.comparing(Apple::getWeight))
                .map(d -> d.getColor())//只獲取名字
            //  .map(APPle::getColor)
                .collect(Collectors.toList());
        System.out.println(namelist2);

                     

Stream 可以用來 操作 Collection, source , sequence。

Stream 可以並行處理。

Stream 中 三個重要的概念:

sequence of elements  : 對應上面例子中的 Apple.

source                          :對應上面例子的List<Apple>

Data processing operations  : 對應上面的filter, map  等操作。

Stream 是鏈式操作,每個操作都返回一個stream。這種鏈式 也可以是懶載入的。

Stream 流 是一次性的。例如:

 這種寫法是會報錯的。stream 只會操作一次。

Stream 與Collection 區別:

Stream 中 的 Data processing operations  分為兩類:

Intermediate  operations  : 該操作會產生一個stream。 以便往下進項操作。 例如 fiter, map ,limit

Terminal   operations  : 該操作會中斷 stream。 例如 foreach,collect ,reduce.

Stream 建立