Day 29 Stream流和方法引用

Day 29

1. Stream 流

1.1 引入

	Stream 流不是I/O流,按照流水線處理方式來考慮代碼中的思想。
	JDK1.8 之後,我們擁有了Lambda表達式,讓代碼的中心偏向解決實際問題,直到重點,可以提高效率。
	Stream流中使用了大量Lambda表達式,利用Lambda操作方式,提供開發效率

1.2 傳統遍歷方式和Stream流方式

Stream流更傾向於重點

1.3 Stream流對應的思想

流水線
	原材料從頭到尾只會佔用一份空間,中間的過程中不會佔用空間,最後生成一個結果。
	
Stream流有一些特徵:
	1. 帶有很多Stream流操作的方法,filter、limit、map、sorted、skip...這些方法大多是都會使用到函數式接口,有Lambda表達式
	2. 整個Stream流模型造作過程中,只有執行到count,foreach等方法,操作真正的執行中的模型,如果不存在結果嚮導,中間的所有操作是無效的,這裏得益於Lambda表達式的延後性。
	3. Stream流是存在一定的管道性Pipelining流水線

1.4 獲取Stream流

java.util.stream.Stream<T> JDK1.8新特徵
	1. 所有的Collection<T>集合都有對應的stream();
	2. 可以通過Stream類中的static Stream of() 獲取
		static Stream<T> of(T... t);
		static Stream<T> of(T t);

1.5 Stream常用方法

延遲方法
	返回值類型依然是Stream接口,沒有允許我們操作真正的資源
	允許鏈式操作
終結方法
	返回類型不是Stream接口本身,要麼處理數據,要麼返回其他類型數據,
	不再支持鏈式操作
	count、foreach

1.5.1 foreach方法【終結方法】

void foreach(Cunsumer<? super T> action);
/*
終結方法
	需要一個Consumer接口進行操作,消耗一個數據
	可以使用Lambda表達式
*/

1.5.2 filter方法

Stream<T> filter(Predicate<? super T> filter);
/*
    filter 是過濾方法,需要的參數使Predicate接口,
    可以使用Lambda方法
    這裏返回值類型是過濾後的Stream流對象,可以進行鏈式操作
    Predicate接口方法  	
*/

1.5.3 map方法

<R> Stream<R> map(Function<? super T, ? super R> fun);
/*
類型轉換操作,得到的一個轉換之後數據類型的Stream流對象
這裏需要的參數是Functtion函數式接口,
	R apply(T t);
	T類型的數據轉換成R類型數據
*/

1.5.4 count方法 【終結方法】

long count();
/*
返回當前Stream流對象中有多少個元素
類似有Collection接口下的size(). String的length();
【終結方法】
	一旦執行Stream流對象被關閉
*/

1.5.5 limit方法

Stream<T> limit(long maxSize);
/*
對於當前Stream流對象操作的數據進行限制操作,限制個數到maxSize
例如:
	Stream流中保存7個數據,取前5個。
*/

1.5.6 skip 方法

Stream<T> skip(long n);
/*
返回值依然是一個Stream流對象,這裏跳過當前Stream流對象前n個元素
*/

1.5.7 concat方法

static Stream<T> concat(Stream<? extends T> stream1,Stream<? extends T> stream2);
/*
拼接兩個Stream流對象,是一個靜態方法,得到一個新的Stream流對象
*/

1.5.8 原始操作方式和Stream流操作方式對比

1. 一個String類型的字符串集合
2. 過濾,得到包含5的數據
3. 跳過前三個數據
4. 限制得到前5個數據
5. 兩個String類型集合字符串合併
6. 轉換成Person類型
7. 展示

2. 方法引用

2.1 Lambda冗餘問題以及方法引用初識

2.2 方法引用小要求

 testPrint("鄭州加油!!!", str -> System.out.println(str));
 
 testPrint("鄭州加油!!!", System.out::println);
 
 1. 明確對象
 	對象 ==> 調用者
 	類對象,類名,super,this,構造方法,數組構造方法
 2. 明確的執行方法
 	該方法只有名字不需要顯式出現參數
 3. 需要處理的數據
 	【聯想,推導,省略】
 4. :: 方法引用格式

2.3 通過類對象執行方法引用

1. 明確對象
	類對象
2. 明確執行的方法
	自定義
3. 處理的數據
	簡單要求爲String類型

2.4 通過類名執行方法引用

2.5 通過super關鍵字執行方法引用

2.6 通過this關鍵字執行方法引用

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