java8的stream流用法

​這篇文章從我的csdn復制過來,格式有點難看,可以直接去csdn看

目錄

一、stream流的分類

二、stream流的用法

1、準備工作

2.流的構造

3.方法測試 (測試方法的用法)

1.filter方法

2.map

3.flatMap

4.distinct()

5.sorted()

6.peek()

7.limit()

8.skip()

9.foreach()

10.forEachOrdered()

11.toArray()

12.reduce()

13.collect()

14.anyMatch()、allMatch()、noneMatch()

15.findFirst()、findAny()

16.stream流的一些操作(待考證)

三、Optional類


一、stream流的分類

分為串行流和並行流。

使用parallelStream方法可以得到一個並行流,並行流底層使用的是forkjoin框架,對於一些計算量比較大的任務,使用並行流可能極大的提升效率。但是使用並行流必須保證每個元素都獨立不受影響。每一個元素的功能(function)在做什麼及它是否適合運行在並行代碼中。當方法是調用一些同步方法,並行流可能會在同步方法上等待,進而導致並行流的性能並沒有想象中高。(所以要有選擇的使用)。

串行流就是按照順序執行的,平常最多使用的就是這個。

其中Stream有一個源,0個或者多個中間操作,以及一個終止操作。Stream隻有遇到終止操作,它的源才開始執行遍歷操作,而且隻會進行一次遍歷,而不是每個操作都執行一次遍歷。

java中的Stream帶有lazy執行特征,在整個操作過程中, 隻有遇到terminate操作函數,才會觸發stream的整體運算。即,如果沒有terminate動作,中間不論做什麼, 都不會執行。map和peek都屬於中間操作,隻有執行完終止操作才會對原來的對象進行改變。

常見的操作可以歸類如下:

  • Intermediate 操作(中間操作)
  • Terminal 操作(終止操作)
  • Short-circuiting 操作(短路操作)當操作一個無限大的Stream,而又希望在有限時間內完成操作,則在管道內擁有一個 short-circuiting 操作是必要非充分條件。

借鑒stream的分類(上圖借鑒的連接,支持原創)

其中limit是一個 short-circuiting stateful intermediate operation (也是一個短路操作)。

這樣理解中間操作和終止操作。一個中間操作或者多個中間操作,其返回的結果對象還是一個stream流,但是一旦使用瞭終止操作,那麼返回的就不在是一個stream流,就會返回對應的終止操作的對象。其中屬於終止操作的短路操作也是會返回對應的對象,而不是一個流。

二、stream流的用法

1、準備工作

(1)實體類 Admin

/** * <p> * 管理員信息表 * </p> * * @author zwh * @since 2021-09-01 */ @Data @EqualsAndHashCode(callSuper = false) @TableName("lib_admin") public class Admin implements Serializable { /** * 管理員id */ @TableId(type = IdType.AUTO) private Long id; /** * 姓名 */ private String name; /** * 密碼 */ private String password; /** * 加密鹽 */ private String salt; /** * 創建時間 */ private LocalDateTime createTime; /** * 更新時間 */ private LocalDateTime updateTime; /** * 是否刪除 0 否 false ,1 是 true */ private Boolean isDeleted; }

(2)數據庫測試的數據

b0cd4a02f35d02c7cae86b9107a8dc88

以上面的數據為基準去測試對應的stream的方法。

2.流的構造

一般有三個方法。

1.直接賦值

2.數組構造

3.集合構造

// 1. Individual values Stream stream = Stream.of("a", "b", "c");

// 2. Arrays String [] strArray = new String[] {"a", "b", "c"};

stream = Stream.of(strArray); stream = Arrays.stream(strArray);

// 3. Collections List<String> list = Arrays.asList(strArray); stream = list.stream();

3.方法測試 (測試方法的用法)

(List<Admin> adminList = this.baseMapper.selectList(null)):默認的adminList為全查表數據

通過stream借助lamda表達式對集合collection進行操作(篩選、排序、聚合等),這裡采用集合的方法去構造stream流

1.filter方法

filter方法是過濾方法,是留下符合條件的數據,形成一個新的stream流。

查出所有被刪除的人。

@Override

public List<Admin> init() {

/* 學習stream流的用法 */

List<Admin> adminList = this.baseMapper.selectList(null);

List<Admin> list = adminList.stream().filter(Admin::getIsDeleted).collect(Collectors.toList());

return list ;

//return this.baseMapper.selectList(Wrappers.<Admin>lambdaQuery().eq(Admin::getIsDeleted,true));

}

上面可以看出filter的用法是留下符合filter(),括號裡面的條件的數據,這裡就是符合isdeletde = true ;把符合條件的保存下來,不符合條件的直接過濾。

當然也可以直接用一條sql查詢,但是這裡是測試filter的用法。

當然filter是一個中間操作,可以繼續連接中間操作,知道遇到一個終止操作,這個stream流就停止瞭。

d747f746646a9c8135a6e43795751365

2.map

Returns a stream consisting of the results of applying the given function to the elements of this stream.

发表回复

相关推荐

化妝品行業L'OCCITANE研究報告:積極求變的全球天然個護集團

(報告出品方/作者:興業證券,宋婧茹、陳雅雯)1. 源自普羅旺斯的天然個護品牌集團LOCCITANE 是一間以天然和有機成分生產化...

· 2分钟前

42式太極劍劍譜及口訣整理

(1)起 勢 (2)並步點劍(3)弓步削劍(4)提膝劈劍(5)左弓步攔(6)左虛步撩(7)右弓步撩(8)提膝捧劍(9)蹬腳前刺(...

· 5分钟前

小孩咳嗽問題匯總

愛莫遲的用戶裡,很大一部分是小孩。任何一個孩子在成年前都難免有咳嗽的經歷吧。前幾天一個傢長問小孩咳嗽的護理方法,我就...

· 8分钟前

《 火影忍者》劇場版觀影順序

火影忍者劇場版第一部《大活劇!雪姬忍法帖》上映時間:2004年8月21日劇情概括:漩渦鳴人他們接到瞭一個新的任務:電影《風雲...

· 9分钟前

VR 不完全科普指南

一、上帝的畫筆你有沒有想過創造一個世界?或者,如果讓你當創世神的話,你知道該怎麼構造這個世界嗎?千百年來,人類一直試...

· 13分钟前

Copyright 2015-2025 www.icpchaxun.com ©All Rights Reserved.