java?Stream流常見操作方法(反射,類加載器,類加載,反射)
Stream流常見的中間操作方法
- Streamfilter(Predicate predicate):用于對(duì)流中的數(shù)據(jù)進(jìn)行過濾
predicate接口中的方法 boolean test(T t):對(duì)給定的參數(shù)進(jìn)行判斷,返回一個(gè)布爾值
- Stream limit(long maxSize):返回此流中元素組成的流,截取前指定參數(shù)個(gè)數(shù)的數(shù)據(jù)
- Stream skip(long n) :跳過指定參數(shù)個(gè)數(shù)據(jù),返回有該流的剩余元素組成的流
- staticStreamconcat(Stream a ,Stream b):合并a和b兩個(gè)流為一個(gè)流
- Streamdiatinct():返回有該留的不同元素(根據(jù)Objectequals(Object) 組成的流
- Stream sorted():返回有潮流的元素組成的流,根據(jù)自然順序排序
- Stream sorted(Comparator comparator):返回由該流元素組成的流,根據(jù)提供的Compatator進(jìn)行排序
- Streammap(Function mapper):返回由給定函數(shù)應(yīng)用于此流的元素結(jié)果組成的流
function 接口中的方法 R applu(T t)
- intStream mapToint(TointFunction mapper):返回一個(gè)intStream其中包含將給定函數(shù)應(yīng)用于此流的元素的結(jié)果
- intStream: 表示原始int流
- ToIntFunction接口中的方法
- int applyAsInt(T value)
package Demo1; import java.util.ArrayList; public class Demo32 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("張曼玉"); list.add("王祖賢"); list.add("柳巖"); list.add("張敏"); list.add("張無忌"); //以張開頭 list.stream().filter(s -> s.startsWith("張")).forEach(System.out::println); System.out.println("-------------"); //長度為3 list.stream().filter(s -> s.length()==3).forEach(System.out::println); System.out.println("---------------"); //張,長度為3 list.stream().filter(s -> s.startsWith("張")).filter(s -> s.length()==3).forEach(System.out::println); } }
package Demo1; import java.util.ArrayList; public class Demo33 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("張曼玉"); list.add("王祖賢"); list.add("柳巖"); list.add("張敏"); list.add("張無忌"); //需求一,取前三個(gè)數(shù)據(jù)在控制臺(tái)輸出 list.stream().limit(3).forEach(System.out::println); //跳過前三個(gè)元素 list.stream().skip(3).forEach(System.out::println); //跳過前2個(gè)元素,把剩下元素中國前兩個(gè)在控制臺(tái)上輸出 list.stream().skip(2).limit(2).forEach(System.out::println); } }
package Demo1; import java.util.ArrayList; import java.util.stream.Stream; public class Demo34 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("張曼玉"); list.add("王祖賢"); list.add("柳巖"); list.add("張敏"); list.add("張無忌"); //需求1,取前4給數(shù)據(jù)組成一個(gè)流 Stream<String> s1 = list.stream().limit(4); //跳過前兩個(gè)數(shù)據(jù)組成一個(gè)流 Stream<String> s2 = list.stream().skip(2); //需求3,合并1,2得到的流,結(jié)果輸出在控制臺(tái) Stream.concat(s1,s2).forEach(System.out::println); //4,合并1,2流,輸出在控制臺(tái),字符串元素不能重復(fù) Stream.concat(s1,s2).distinct().forEach(System.out::println); } }
package Demo1; import java.util.ArrayList; import java.util.stream.Stream; public class Demo34 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("lingqinxia"); list.add("zhangmanyu"); list.add("wangzhuxian"); list.add("liuyan"); list.add("zhangming"); list.add("zhangwuji"); //按照字母順序輸出 // list.stream().sorted().forEach(System.out::println); //按照長度排列輸出 //list.stream().sorted((s1,s2) -> s1.length() - s2.length()).forEach(System.out::println); list.stream().sorted((s1,s2) ->{ int num = s1.length()-s2.length(); int num2 = num ==0?s1.compareTo(s2):num; return num2; }).forEach(System.out::println); } }
package Demo1; import java.util.ArrayList; import java.util.stream.Stream; public class Demo34 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("30"); list.add("40"); list.add("50"); list.add("7"); list.add("87"); list.add("756"); //將集合中的制度串?dāng)?shù)據(jù)轉(zhuǎn)換為整數(shù)輸出 //list.stream().map(Integer::parseInt).forEach(System.out::println); // list.stream().mapToInt(Integer::parseInt).forEach(System.out::println); //int sum 返回流中的總和 int result = list.stream().mapToInt(Integer::parseInt).sum(); System.out.println(result); } }
Stream流中常見的終結(jié)操作方法
- void forEach(Consumer action):對(duì)此流的每個(gè)元素操作
Consumer接口中的方法
void accept(T t ):對(duì)給定的參數(shù)執(zhí)行此操作
- long count():返回此流中的元素?cái)?shù)
package Demo1; import java.util.ArrayList; import java.util.stream.Stream; public class Demo34 { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("林青霞"); list.add("張曼玉"); list.add("王祖賢"); list.add("柳巖"); list.add("張敏"); list.add("張無忌"); //list.stream().forEach(System.out::println); long count = list.stream().filter(s -> s.startsWith("張")).count(); System.out.println(count); } }
反射
類加載器
類加載:
- 當(dāng)程序要使用某個(gè)類時(shí),如果該類還未被加載到內(nèi)存中,則系統(tǒng)會(huì)通過類的加載,類的連接,類的初始化三個(gè)步驟對(duì)類進(jìn)行初始化,JVM將會(huì)連續(xù)完成這三個(gè)步驟,所有有時(shí)也罷這三個(gè)步驟統(tǒng)稱為類加載或者類初始化
類的加載:
- 就是指將class文件讀入內(nèi)存。并為之創(chuàng)建一個(gè)java.lang.class對(duì)象
- 任何類被使用時(shí)。系統(tǒng)都會(huì)為之建立一個(gè)java.lang.class對(duì)象
類的連接:
- 驗(yàn)證階段:用于檢驗(yàn)被加載的類時(shí)候具有正確的內(nèi)部結(jié)構(gòu),并和其他類協(xié)調(diào)一致
- 準(zhǔn)備階段:負(fù)責(zé)為類的類變量分配內(nèi)存,并設(shè)置默認(rèn)初始化值
- 解析階段:將類的二進(jìn)制數(shù)據(jù)中的符號(hào)引用替換為直接引用
類的初始化:
- 在該階段,主要就是對(duì)類變量進(jìn)行初始化
類的初始化步驟:
- 假如類還未被類加載器和連接,則程序先加載并連接該類
- 加入該類的直接父類還未被初始化,則先初始化其直接父類
- 加入類中有初始化語句,則系統(tǒng)會(huì)依次執(zhí)行這些初始化語句
注意:在執(zhí)行第二個(gè)步驟的時(shí)候,系統(tǒng)對(duì)字節(jié)父類的初始化步驟也遵循初始化步驟1-3
類的初始化時(shí)機(jī):
- 創(chuàng)建類的實(shí)例
- 調(diào)用類的類方法
- 訪問類或者接口類變量,或者為該類變量賦值
- 使用反射方式來強(qiáng)制創(chuàng)建某個(gè)類或者接口對(duì)應(yīng)的java.lang.class對(duì)象
- 初始化某個(gè)類的子類
- 直接使用java.exe命令來運(yùn)行某個(gè)主類
反射概述
java反射機(jī)制:是指在運(yùn)行時(shí)去獲取一個(gè)類的變量和方法的信息,然后通過獲取到的信息來創(chuàng)建對(duì)象,調(diào)用方法的一種機(jī)制。由于這種動(dòng)態(tài)性,可以極大的增強(qiáng)程序的靈活性,程序不用在編譯期就完成確定,在運(yùn)行時(shí)仍然可以擴(kuò)展
- 獲取class類的對(duì)象
- 使用class屬性來獲取對(duì)應(yīng)的class對(duì)象,舉例:student.class將會(huì)返回student類對(duì)應(yīng)的class對(duì)象
- 調(diào)用對(duì)象的getclass()方法,返回該對(duì)象所屬類對(duì)應(yīng)的class對(duì)象,該方法是object類中的方法,所有的java對(duì)象都可以調(diào)用該方法
- 使用class類中的靜態(tài)方法forName(String className),該方法需要傳入字符串參數(shù),該字符串參數(shù)的值是某個(gè)類的全路徑,也就是完整的包名路徑
到此這篇關(guān)于java Stream流常見操作方法(反射,類加載器,類加載,反射)的文章就介紹到這了,更多相關(guān)Stream流操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用Arrays.asList報(bào)UnsupportedOperationException的解決
這篇文章主要介紹了Java使用Arrays.asList報(bào)UnsupportedOperationException的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類操作示例
這篇文章主要介紹了Java實(shí)現(xiàn)動(dòng)態(tài)創(chuàng)建類操作,結(jié)合完整示例形式分析了Java動(dòng)態(tài)創(chuàng)建類的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2020-02-02intellij idea 啟動(dòng)tomcat 1099端口被占用的解決
這篇文章主要介紹了intellij idea 啟動(dòng)tomcat 1099端口被占用的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09java中isEmpty和isBlank的區(qū)別小結(jié)
Java中的isEmpty和isBlank都是用來判斷字符串是否為空的方法,但在不同的情況下有所區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09SpringBoot集成支付寶沙箱支付的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot集成支付寶沙箱支付的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12詳解spring開發(fā)_JDBC操作MySQL數(shù)據(jù)庫
本篇文章主要介紹了spring開發(fā)_JDBC操作MySQL數(shù)據(jù)庫,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12SpringSecurity6自定義JSON登錄的實(shí)現(xiàn)
目前最新版的Spring Boot已經(jīng)到了3.0.5了,隨之而來Spring Security 目前的版本也到了6.0.2了,Spring Security寫法的變化特別多,本文就來介紹下,感興趣的可以了解一下2023-12-12