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