Java中的Stream API :)
生活随笔
收集整理的這篇文章主要介紹了
Java中的Stream API :)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、流的形成方法
1. 集合 ---> 流集合.stream() 2. 數(shù)字流的形成(int型為例)IntStram.of(1,2,3,4) 3. 數(shù)組 ---> 流Arrays.stream(數(shù)組) 4. 把文件中的每一行讀出來(lái)作為流的元素Files.lines(Paths.get("aaa.txt")) 5. 生產(chǎn)者接口的使用 Stream.generate(生產(chǎn)者接口)舉例:生成5個(gè)隨機(jī)數(shù)Random r = new Random();Stream.generate( () -> r.nextInt(100) ).limit(5).forEach( x->System.out.println(x));二、重要接口
1. Predicate 斷言接口對(duì)應(yīng)的lambda:一個(gè)參數(shù),返回結(jié)果是boolean(a) -> { return true|false; }2. Function 函數(shù)接口對(duì)應(yīng)的lambda:一個(gè)參數(shù),一個(gè)返回結(jié)果,參數(shù)和返回結(jié)果的類型可以不一樣3. BiPredicate 雙參數(shù)斷言對(duì)應(yīng)的lambda:兩個(gè)參數(shù),返回結(jié)果是boolean(a, b) -> { return true|false; }4. BiFunction 雙參數(shù)函數(shù)接口兩個(gè)參數(shù),一個(gè)結(jié)果(a, b) -> { 根據(jù)ab返回一個(gè)結(jié)果} 5. Consumer 消費(fèi)接口一個(gè)參數(shù) 沒(méi)有結(jié)果(a) -> { 不需要return }6. BiConsumer 雙參數(shù)消費(fèi)接口兩個(gè)參數(shù),沒(méi)有結(jié)果7. Supplier 生產(chǎn)者接口沒(méi)有參數(shù),返回一個(gè)結(jié)果 () -> {return 結(jié)果}三、Stream API
Stream
1. filter(Predicate<? super T> predicate)過(guò)濾,參數(shù)是一個(gè)斷言接口作用:用于過(guò)濾流中的元素,返回true留下,返回false去除返回:Stream類型2. map(Function<? super T,? extends R> mapper)多個(gè)映射,參數(shù)是一個(gè)函數(shù)接口作用:用于對(duì)流中的元素進(jìn)行改變等操作,比如加減乘除返回:Stream類型3. flatMap(Function<? super T,? extends Stream<? extends R>>mapper) 扁平化映射,參數(shù)是一個(gè)函數(shù)接口作用:將所有元素都放入流中返回:Stream類型 4. forEach(Consumer<? super T> action)遍歷,參數(shù)為消費(fèi)者接口作用:用于遍歷返回:void 5. distinct() 去重復(fù),無(wú)需參數(shù)作用:用于去除流中的重復(fù)元素返回:Stream類型 6. count()統(tǒng)計(jì)個(gè)數(shù),無(wú)需參數(shù)作用:用于返回流中的元素 個(gè)數(shù)返回:long類型 7. max(Comparator<? super T> comparator) 最大值,參數(shù)為比較器作用:用于返回流中最大的元素返回:Optional類型min(Comparator<? super T> comparator) 同理數(shù)字流(例:IntStream)
IntStream intstream = IntStream.Of(1,2,3,4) instream.max() 求最大值 instream.min() 求最小值 instream.average() 求平均值 instream.sum() 求和 注意:以上方法不可以向舉例中一樣連續(xù)調(diào)用原因見Stream api思想收集流的結(jié)果
1. 將流轉(zhuǎn)換為集合Collectors為收集器流.collect(Collectors.toList) //轉(zhuǎn)換為L(zhǎng)ist集合流.collect(Collectors.toSet) //轉(zhuǎn)換為Set集合 2.限制收集個(gè)數(shù)limit(int num) num為收集的個(gè)數(shù)格式:流.limit(3).collect(Collectors.toList) //之收集前三個(gè)結(jié)果 3.分組流.collect(Collectors.groupingBy(函數(shù)接口))返回Map集合key是組名,value為組員的集合舉例:創(chuàng)建集合學(xué)生集合名為student,集合中都是學(xué)生對(duì)象//按照性別分組Map<String, List<Student>> mp = students.stream().collect(Collectors.groupingBy((s) -> s.getSex() ));System.out.pringln(mp); //打印看結(jié)果 4.下游收集器流.collect(Collectors.groupingBy(函數(shù)接口,Collectors.counting()))工作方式:先分組,在求每組內(nèi)元素個(gè)數(shù)返回Map集合,key為組名,value為每組的個(gè)數(shù)四、并行計(jì)算
List<Integer> list = Arrays.aslist(1,2,3,4); int sum = list.parallelStream().mapToInt(a -> a).sum(); // 獲得集合的并行流 轉(zhuǎn)為數(shù)字流 求和 System.out.println(sum); //結(jié)果為 10五、Stream API中重要思想
流水線思想(Pipeline):
把流中的數(shù)據(jù)一個(gè)接一個(gè)的進(jìn)行處理,即每個(gè)數(shù)據(jù)都會(huì)經(jīng)過(guò)后續(xù)的filter、map等方法的依次調(diào)用。
在整個(gè)執(zhí)行過(guò)程中,lambda表達(dá)式是懶惰的,不執(zhí)行終結(jié)方法的話,不會(huì)觸發(fā)lambda的執(zhí)行。
終結(jié)方法: collect, sum, max, min 等
運(yùn)算過(guò)程中不會(huì)改變?cè)技?#xff0c;收集器會(huì)生成新的集合對(duì)象。
總結(jié)
以上是生活随笔為你收集整理的Java中的Stream API :)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Sam Altman的成功学|升维指南
- 下一篇: 贪吃蛇java 暂停_Java实现贪吃蛇