効率的な別れ996、効率的な戦闘をプログラミングドアを開ける3-3のjava:使用のビジネス・ロジックラムダ+ストリーム処理

キー1

次の方法の1.1ペアの応用(これは滞在の方法の私の理解で、何か間違った場所、正しい私に歓迎があります)

Stream.peek:動作フローなしの対流動作は行われません

切り捨てられないリターンこのストリームの元素からなるストリームを、  もはや{以下であることが@code 長さがmaxSizeの}。

<P> これは、Aである<a href="package-summary.html#StreamOps"> 短絡ステートフル中間動作する</a>

 

 

 

Collection.streamはフローを確立します

シーケンシャルを返します。

 

 

一貫性のある構造のStream.filter選択されたセット

所与の適用の結果からなるストリームを返し、このストリームの要素に機能。

 

 

最初のN Stream.limit(n)を取り出します

 

Stream.mapは(構造が不整合であってもよい)、新しいストリームを返します

@return 新しいストリーム

 

 

動作可能Stream.collectのセットを返します

@return { @code このストリームの最小要素、記述オプション} *または空{ @code ストリームが空である場合は、オプションを}

 

 

 

 

 

2コードのチュートリアル

要件:

 女性の友人流域の最初の章のニーズに応じて要件を提案した
1枚のプリント*すべての商品を
購入する2冊に*商品の特定のクラスを
最も高価3の*購入2
* 4プリント二つの最も高価な商品名と合計金額を

 


テストカテゴリ:

パッケージcom.imooc.zhangxiaoxi.stream。

輸入com.alibaba.fastjson.JSON;
輸入com.imooc.zhangxiaoxi.lambda.cart.CartService。
輸入com.imooc.zhangxiaoxi.lambda.cart.Sku;
輸入com.imooc.zhangxiaoxi.lambda.cart.SkuCategoryEnum;
輸入org.junit.Test; 

輸入はjava.util.ArrayList;
輸入java.util.Arrays。
輸入はjava.util.Comparator;
輸入はjava.util.List;
輸入java.util.concurrent.atomic.AtomicReference;
輸入java.util.stream.Collectors。

/ ** 
 * StreamVs 
 * 
 * @author魏ピーズ
 * @date 2020年4月7日
 * / 
パブリック クラスStreamVs { 

    / ** 
     *ストリームと比較する通常の方法で、このセクションでは、一般的な方法を適用
     * 
     女性の友人流域の最初の章のニーズによると*要件提案
     * 1枚のプリントにすべての商品を
     * 2商品の特定のクラスを購入する図書
     * 2つの3購入するには高価
     * 4最も高価なプリント二つのアイテムや総名前を
     * / 

    / ** 
     *通常のメソッド
     * / 
   / * @Test 
    ます。public void oldCartHandle(){ 
        / / 1全商品印刷する
        一覧<SKU> skuList CartService.getSkuList =(); 
        のSystem.out.println(「を========================== ================================================== ========================「); 
        (SKU SKU用:skuList){
            System.out.println(JSON.toJSONString(SKU、真));  
                }そうでない場合(o1.getTotalPrice()<o2.getTotalPrice()){
        } 


        // 2排除图书类
        一覧<SKU> skuListNoBooks =新規のArrayList <SKU>(); 
        (SKU SKU:skuList)について{ 
            場合{(!sku.getSkuCategory()のequals(SkuCategoryEnum.BOOKS)。)
                skuListNoBooks.add(SKU)。
            } 
        } 

        // 3最贵的买两件
        skuListNoBooks.sort(新しいコンパレータ<SKU>(){ 
            @Override 
            公共のint比較(SKUのO1、SKU 02){ 
                IF(o1.getTotalPrice()> o2.getTotalPrice()) { 
                    戻り-1; 
                } 
            }
                    1を返します。
                }他{ 
                    0を返します。
        }); 

        一覧<SKU> skuListPreTwo =新しいのArrayList <SKU>(); 
        以下のために(INT I = 0; I <2; I ++){ 
            skuListPreTwo.add(skuListNoBooks.get(I))。
        } 

        のSystem.out.println( "========================================== ================================================== ======== "); 
        二重totalPrice = 0.0。
        (SKU SKU:skuListPreTwo)用{ 
            totalPrice + = sku.getTotalPrice()。
        } 

        リストの<string> skuNameList =新規のArrayList <ストリング>(); 
        {(skuListPreTwo SKU SKU)のため
            skuNameList.add(SKU。 
        } 


        のSystem.out.println( "商品总价为:" + totalPrice)。
        System.out.println( "商品名称为:" + JSON。 
    } * / 

    @Test 
    / ** 
     *使用ストリームフロー要件を達成するために:
     * / 
    パブリック 無効newCartHandler(){ 

        // 、あなたがセキュリティマルチスレッド、マルチスレッドカウントは防ぐ競合維持することができる原子参照クラスの定義 
        AtomicReference <ダブル> =マネー新しい新しい AtomicReference、<>(は、Double.valueOf(0.0 )); 

        リスト <文字列> skuNameList = 
        CartService.getSkuList()
                / ** 
                 。* 1流れ確立する
                 * / 
                .stream()
                / ** 
                 すべての項目に*印刷情報を2 
                 * / 
                .peek(SKU - >のSystem.out.println(JSON.toJSONString(SKU、trueに)))
                 / ** 
                 * 3選択された非ブッククラス
                 * / 
                .filter(SKU - !> 。Sku.getSkuCategory()のequals(SkuCategoryEnum.BOOKS))
                 / ** 
                 * 4(メソッドを使用すると、価格の並べ替えによって引用)
                 *逆降順逆ソート
                 * / 
                .sorted(.reversed Comparator.comparing(SKU :: getTotalPrice)())
                / ** 
                 *最初の2。5削除
                 * / 
                .limit( 3 / ** 
                 *全生成物の蓄積。6量
                 * / 
                .peek(SKU - > {money.set(money.get()+ sku.getTotalPrice());})
                 / **
                 *コレクションの商品名うち7
                 * / 
                .MAP(SKU - > sku.getSkuName())
                 / ** 
                 * 8を収集した結果
                 * / 
                .collect(Collectors.toList()); 

                // お金はタイプを取得することですので、値を取得する必要がある 
                のSystem.out.printlnを( "合計である:" + money.get()); 
                のSystem.out.println( "商品名:" + JSON.toJSONString(skuNameList、真の)); 
    } 


}

 

 

 

 

他のクラスリファレンス2-3:

 

ログを出力します:

D:\ javaの\ JDK \ jdk9 \ jdk9 + 181_windows-x64_ri \ javaの-SE-9里\ jdk9 \ binに\ java.exeを-ea -Didea.test.cyclic.buffer.size = 1048576「 - javaagent:D:\ javaの\ devolopKit \アイデア\ anZh \のIntelliJ IDEA Community Editionの2018年1月4日\ libに\ idea_rt.jar = 38089:D:\ javaの\ devolopKit \アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日\ binに」 -Dfile.encoding = UTF-8 -classpath「D:\ javaの\ devolopKit \アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日\ libに\ idea_rt.jar; D:\ javaの\ devolopKit \アイデア\ anZh \のIntelliJ IDEAコミュニティ版2018年1月4日\プラグイン\ JUnitの\ libに\ JUnitの-rt.jarの; D:\ javaの\ devolopKit \アイデア\ anZh \のIntelliJ IDEA Community Editionを2018年1月4日\プラグイン\ JUnitの\ libに\ junit5-rt.jarの; F: \ xiangmu3 \新\ test996 \ターゲット\テスト・クラス; F:\ xiangmu3 \新\ test996 \ターゲット\クラス; F:\ xiangmu3 \新\ test996 \ libに\ COM \ \グアバグアバ\グーグル\ 28.2-JRE \グァバ-28.2-jre.jar; F:\ xiangmu3 \新\ test996 \ libに\ COM \ \グアバ\ failureaccess \ 1.0グーグル。1 \ failureaccess-1.0.1.jar; F:\ xiangmu3 \新\ test996 \ libに\ COM \グーグル\グアバ\ listenablefuture \ 9999.0空ツー回避 - 紛争-と、グアバ\ listenablefuture-9999.0-空へ-avoid紛争-と-guava.jar; F:\ xiangmu3 \新\ test996 \ libに\ COM \ \コードをグーグル\ FindBugsの\ JSR305 \ 3.0.2 \ jsr305-3.0.2.jar; F:\ xiangmu3 \新\ test996 \ libに\ orgの\ checkerframework \チェッカー-QUAL \ 2.10.0 \チェッカー-QUAL-2.10.0.jar; F:\ xiangmu3 \新\ test996 \ libに\ COM \グーグル\ errorprone \ error_prone_annotations \ 2.3.4 \ error_prone_annotations-2.3.4.jar; F:\ xiangmu3 \新\ test996 \ libに\ COM \グーグル\ j2objc \ j2objc-注釈\ 1.3 \ j2objc-注釈-1.3.jar; F:\ xiangmu3 \新\ test996 \ libに\ JUnitの\ JUnitの\ 4.12 \のJUnit-4.12.jar; F:\ xiangmu3 \新\ test996 \ LIB \ ORG \ hamcrest \ hamcrestコア\ 1.3 \ hamcrestコア-1.3.jar; F:\ xiangmu3 \新\ test996 \ LIB \ COM \アリババ\ fastjson \ 1.2.58 \ fastjson-1.2.58.jar」com.intellij.rt.execution.junit。JUnitStarter -ideVersion5  - junit3 com.imooc.zhangxiaoxi.stream.StreamVs、newCartHandler 
{
     "skuCategory": "エレクトロニクス"  "SKUID":2020001  "skuName": "无人机"  "skuPrice":999.0  "totalNum":1  " totalPrice ":999.0 
} 
{
     "skuCategory":"衣類" "SKUID":2020002  "skuName": "Tシャツ"  "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":"衣類」 "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": "エレクトロニクス"  "SKUID":2020008  "skuName": "ThinkPadの"  "skuPrice":5000.0 "totalnum" :. 1  "totalPrice":5000.0 
} 
合計である: 7999.0
製品名:[
    「ThinkPadの」「バーベル」「ドローン」
] 

プロセス終了コードで仕上げた 0

 

おすすめ

転載: www.cnblogs.com/1446358788-qq/p/12664305.html