反射
反射
關于java.lang.class 類的理解
類的加載過程
程序經過javac.exe 命令以后,會生成一個或多個字節(jié)碼文件,接著我們使用java.exe命令對某個字節(jié)碼文件進行解釋運行。相當于將某個字節(jié)碼文件加載到內存中,此過程稱為類的加載。加載到內存中的類,我們就稱為運行時類,此運行時類,就作為class的一個實例。
讀取配置文件
創(chuàng)建運行時類的對象
getMetods(); 獲取當前運行時類及其所有父類中聲明為public權限的方法
getDeclaredMethods() ;獲取當前運行時類中聲明的所有方法。(不包含父類中聲明的方法)
獲得指定內容
屬性值
方法
方法
Lambda表達式的使用
1.舉例 ?(o1,o2) -> compare(o1,o2)
左邊:形參列表(其實就是接口中的抽象方法的形參列表)。參數類型可以省略;只有一個參數,可以省略小括號;
右邊:lambdat體 其實就是重寫的抽象方法的方法體。
四大函數式接口
消費型接口 Consumer<T> void accept(T t)
供給型接口 Supplier<T> ?T get()
函數型接口 Function<T,R> R apply(T t)
斷定型接口 Predicate<T> boolean test(T t)?
方法引用
使用情景:當要傳遞給Lambda體的操作,已經有實現(xiàn)的方法了,可以使用方法引用!
方法引用,本質上就是Lambda表達式,而Lambda表達式作為函數式接口的實例。所以方法引用,也是函數式接口的實例。
使用格式: 類(或對象) :: 方法名
具體分為如下的三種情況
對象 :: 非靜態(tài)方法
類 :: 靜態(tài)方法
類 ?:: 非靜態(tài)方法 ?
方法引用使用的要求:要求接口中的抽象方法的參數列表和返回值類型與方法引用的方法的形參列表和返回值類型相同,對情況1和情況2;
Stream
Stream關注的是對數據的運算,與CPU打交道。集合關注的是數據的存儲,與內存打交道
自己不會存儲元素
不會改變源對象。相反,他們會返回一個持有結果的新Stream。
操作是延遲執(zhí)行的。這意味著他們會等到需要結果的時候才執(zhí)行
Stream 執(zhí)行流程
Stream的實例化
一系列的中間操作(過濾、映射、...)
終止操作
說明
一個中間操作鏈,對數據源的數據進行處理
一旦執(zhí)行終止操作,就執(zhí)行中間操作鏈,并產生結果。之后,不會再被使用。
篩選與切片
filter(Predicate p) -- ?從流中排除某些元素
limit(n) ; ?截斷流,使其元素不超過給定數量
skip(n); 跳過元素,返回一個扔掉了前n個元素的流。若流中元素不足n個,則返回一個
distinct ?: ?篩選,通過流所生成元素的hashcode()和equals()去除重復元素
映射
map(Function f) -- 接收一個函數作為參數,將元素轉換成其他形式或提取信息,該函數會被應用到每個元素上,并將其映射成一個新的元素
flatMap(Fuction f) ?接收一個函數作為參數,將流中的每個值都換成另一個流,然后把所有流連接成一個流。
排序
終止操作
匹配與查找
allMatch(Predicate p) 檢查是否匹配所有元素
anyMatch(Predicate p) 檢查是否至少匹配一個元素
noneMatch(Predicate p) 價差是否沒有匹配的元素
findFirst :返回第一個元素
findAny : 返回當前流中的任意元素
count : 返回流中的任意元素
max(Comparator c) :返回流中最大值
歸約
reduce(T identity,BinaryOperator) ?可以將流中元素反復結合起來,得到一個值。返回這個值
redece(BinaryOperator) : 可以將流中元素反復結合起來,得到一個值。返回Optional<T>
收集
collect(Collector c) : 將流轉換為其他形式。接收一個Collector 接口的實現(xiàn),用于給Stram中的元素做匯總的方法