1.1 本節目的html
僅僅爲了展現Stream流操做集合的便利性,看看demo就好,後邊他大爺的還繼續講。java
1.2 對如下方法的應用(這是本人對留的方法的理解,有不對的地方,歡迎你們指正)
編程
Stream.peek: 對流的操做,不操做流,不執行json
Returns a stream consisting of the elements of this stream, truncated to be no longer than {@code maxSize} in length.windows
<p>This is a <a href="package-summary.html#StreamOps">short-circuiting stateful intermediate operation</a>.安全
Collection.stream 創建流多線程
Returns a sequential app
Stream.filter 篩選出結構一致的集合ide
Returns a stream consisting of the results of applying the given function to the elements of this stream.測試
Stream.limit(n) 取出前n條
Stream.map 返回新的流(結構可能不一致)
@return the new stream
Stream.collect 返回可操做的集合
@return an {@code Optional} describing the minimum element of this stream, * or an empty {@code Optional} if the stream is empty
需求:
根據第一章需求,女盆友提出需求
* 1 打印全部商品
* 2 圖書類的商品必定給買
* 3 最貴的買兩件
* 4 打印最貴的兩件商品的名稱和總價
測試類:
package com.imooc.zhangxiaoxi.stream; import com.alibaba.fastjson.JSON; import com.imooc.zhangxiaoxi.lambda.cart.CartService; import com.imooc.zhangxiaoxi.lambda.cart.Sku; import com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** * StreamVs * * @author 魏豆豆 * @date 2020/4/7 */ public class StreamVs { /** * 流和普通方法對比,本節應用普通方法 * * 根據第一章需求,女盆友提出需求 * 1 打印全部商品 * 2 圖書類的商品必定給買 * 3 最貴的買兩件 * 4 打印最貴的兩件商品的名稱和總價 */ /** * 普通方法 */ /* @Test public void oldCartHandle(){ //1 打印全部商品 List<Sku> skuList = CartService.getSkuList(); System.out.println("===================================================================================================="); for(Sku sku: skuList){ System.out.println(JSON.toJSONString(sku,true)); } //2 排除圖書類 List<Sku> skuListNoBooks = new ArrayList<Sku>(); for(Sku sku:skuList){ if(!sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS)){ skuListNoBooks.add(sku); } } //3 最貴的買兩件 skuListNoBooks.sort(new Comparator<Sku>() { @Override public int compare(Sku o1, Sku o2) { if(o1.getTotalPrice()> o2.getTotalPrice()){ return -1; }else if(o1.getTotalPrice() < o2.getTotalPrice()){ return 1; }else{ return 0; } } }); List<Sku> skuListPreTwo = new ArrayList<Sku>(); for(int i = 0;i<2;i++){ skuListPreTwo.add(skuListNoBooks.get(i)); } System.out.println("===================================================================================================="); Double totalPrice = 0.0; for(Sku sku:skuListPreTwo){ totalPrice+=sku.getTotalPrice(); } List<String> skuNameList = new ArrayList<String>(); for (Sku sku:skuListPreTwo){ skuNameList.add(sku.getSkuName()); } System.out.println("商品總價爲:"+totalPrice); System.out.println("商品名稱爲:"+ JSON.toJSONString(skuNameList,true)); }*/ @Test /** * 使用Stream流的方式來實現需求: */ public void newCartHandler(){ //定義 原子引用類,能夠保你多線程 安全,防止多線程 計數衝突 AtomicReference<Double> money = new AtomicReference<>(Double.valueOf(0.0)); List<String> skuNameList = CartService.getSkuList() /** * 1 創建stream流 */ .stream() /** * 2 打印全部商品的信息 */ .peek(sku -> System.out.println(JSON.toJSONString(sku,true))) /** * 3 篩選出非圖書類 */ .filter(sku -> !sku.getSkuCategory().equals(SkuCategoryEnum.BOOKS)) /** * 4 按照價格排序(使用方法引用) * reversed排序反轉 從大到小 */ .sorted(Comparator.comparing(Sku::getTotalPrice).reversed()) /** * 5 取出前兩條 */ .limit(3) /** * 6 累加商品總金額 */ .peek(sku -> {money.set(money.get()+sku.getTotalPrice());}) /** * 7 取出商品名稱集合 */ .map(sku -> sku.getSkuName()) /** * 8 收集結果 */ .collect(Collectors.toList()); //由於money是get類型,須要get一下值 System.out.println("商品總價爲:"+money.get()); System.out.println("商品名稱爲:"+ JSON.toJSONString(skuNameList,true)); } }
其餘類參考2-3:
打印日誌:
D:\java\jdk\jdk9\jdk-9+181_windows-x64_ri\java-se-9-ri\jdk-9\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar=38089:D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\lib\idea_rt.jar;D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\plugins\junit\lib\junit-rt.jar;D:\java\devolopKit\idea\anZh\IntelliJ IDEA Community Edition 2018.1.4\plugins\junit\lib\junit5-rt.jar;F:\xiangmu3\Xin\test996\target\test-classes;F:\xiangmu3\Xin\test996\target\classes;F:\xiangmu3\Xin\test996\lib\com\google\guava\guava\28.2-jre\guava-28.2-jre.jar;F:\xiangmu3\Xin\test996\lib\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;F:\xiangmu3\Xin\test996\lib\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;F:\xiangmu3\Xin\test996\lib\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;F:\xiangmu3\Xin\test996\lib\org\checkerframework\checker-qual\2.10.0\checker-qual-2.10.0.jar;F:\xiangmu3\Xin\test996\lib\com\google\errorprone\error_prone_annotations\2.3.4\error_prone_annotations-2.3.4.jar;F:\xiangmu3\Xin\test996\lib\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;F:\xiangmu3\Xin\test996\lib\junit\junit\4.12\junit-4.12.jar;F:\xiangmu3\Xin\test996\lib\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;F:\xiangmu3\Xin\test996\lib\com\alibaba\fastjson\1.2.58\fastjson-1.2.58.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit3 com.imooc.zhangxiaoxi.stream.StreamVs,newCartHandler { "skuCategory":"ELECTRONICS", "skuId":2020001, "skuName":"無人機", "skuPrice":999.0, "totalNum":1, "totalPrice":999.0 } { "skuCategory":"CLOTHING", "skuId":2020002, "skuName":"T-shirt", "skuPrice":50.0, "totalNum":2, "totalPrice":100.0 } { "skuCategory":"BOOKS", "skuId":2020003, "skuName":"人生的枷鎖", "skuPrice":30.0, "totalNum":1, "totalPrice":30.0 } { "skuCategory":"BOOKS", "skuId":2020004, "skuName":"老人與海", "skuPrice":20.0, "totalNum":1, "totalPrice":20.0 } { "skuCategory":"BOOKS", "skuId":2020005, "skuName":"劍指高效編程", "skuPrice":288.0, "totalNum":1, "totalPrice":288.0 } { "skuCategory":"CLOTHING", "skuId":2020006, "skuName":"大頭皮鞋", "skuPrice":300.0, "totalNum":1, "totalPrice":300.0 } { "skuCategory":"SPROTS", "skuId":2020007, "skuName":"槓鈴", "skuPrice":2000.0, "totalNum":1, "totalPrice":2000.0 } { "skuCategory":"ELECTRONICS", "skuId":2020008, "skuName":"ThinkPad", "skuPrice":5000.0, "totalNum":1, "totalPrice":5000.0 } 商品總價爲:7999.0 商品名稱爲:[ "ThinkPad", "槓鈴", "無人機" ] Process finished with exit code 0