効率的な別れ996、ドアに効率的な戦闘をプログラミング2-7のjavaを開く:決意ロジックパラメトリック - 匿名クラス

1.1キー

1.2プログラミングコード

 

 

1.1キー

匿名の内部クラスを使用しますが、解決されているメモリリークのリスクに明らかな解決策はありません

 

 

1.2プログラミングコード

コモディティ同じエンティティクラス:( 2-3)

:(同じ列挙クラス2-3)

 

製品のクラス:

以下のためのパッケージ変更com.imooc.zhangxiaoxi.lambda.cart; インポートはjava.util.ArrayList; インポートはjava.util.List; パブリッククラスCartService { / ** *匿名内部クラス、メモリリークのリスク、生産プロジェクトが参照されていないが、そこにあるが、ラムダ式の参照をバックアップする* / プライベート静的リスト<SKU> = skuList 新しい新しいのArrayList <SKU> (){{ 追加(新新SKU(2020001、 "UAV"、999.00,1,999.00 、SkuCategoryEnum.ELECTRONICS));追加(新しい新しいSKU(2020002、 "Tシャツ"、50.00,2,100.00 、SkuCategoryEnum.CLOTHING));(ADD 、30.00,1,30.00 "人間の絆"新新SKU(2020003、、SkuCategoryEnum.BOOKS));追加(新しい新SKU(2020004、 "オールド・マン"、20.00,1,20.00 、SkuCategoryEnum.BOOKS));追加(

(); にとって(SKU SKU:skuList){ IF (Sku.getSkuCategory()に等しい(SkuCategoryEnum.ELECTRONICS)){lElectronicsList.add(SKU);}} / * のための(INT I = 0; I <skuList.size(); I ++ ){IF(skuList.get(I).getSkuCategory()に等しい(SkuCategoryEnum.ELECTRONICS)){lElectronicsList.add(skuList.get(I));.}} * / 戻りlElectronicsList;} / ** * versionTestB単入ってくる異なる列挙型の寸法条件パラメータは、* *注異なる製品のリストをプリントアウトし、第2引数:どのように列挙クラスパラメータの転送は、* * * @param skuList * @return * / パブリック静的リスト<SKU> filterSkuListByParam (一覧<SKU> skuList、skuCategoryEnum skuCategoryEnum){リスト<SKU> = lElectronicsList 新しい新規のArrayList <SKU> (); (用0 = I INT; I <skuList.size(); I ++ ){ IF (skuList.get(I).getSkuCategory()に等しい(skuCategoryEnum)){lElectronicsList.add(skuList.get(I));.}} リターンlElectronicsList;} / ** * versionTestC * * *卵、その後、方法は、2つのパラメータに応じて決定されるパラメータの一つであってもよい*フラグがtrueの場合、列挙型は、そうでなければ*決定される合計金額に応じて、決定される@param skuList * @return * / パブリック静的リスト<SKU> filterSkuListByParamB(一覧<SKU> skuList、skuCategoryEnum skuCategoryEnum、dTotalPriceダブル、ブールのフラグ){一覧<SKU> = lElectronicsList 新しい新しいのArrayList <SKU> (); のため(int型I = 0; I <skuList.size(); I ++ ){ IF((&&のフラグ。skuList.get(I).getSkuCategory()に等しい(skuCategoryEnum))|| .getTotalPrice()>(&& skuList.getのフラグ(I!)dTotalPrice)){lElectronicsList.add(skuList.get(I));}} 戻りlElectronicsList;} / ** * * versionTestDこのようなアプローチは、生産のために推奨されていない、クラスが爆発の原因となります。すべてのラムダ式が導入される* * @param skuList * @return * / パブリック静的リスト<SKU> filterSkuListByParamPrediCate(一覧<SKU> skuList、SkuPrediCate skuPrediCate){リスト<SKU> = lElectronicsList 新しい新規のArrayList <SKU> (); 用(INT I = 0; I <skuList.size(); I ++ ){ IF (skuPrediCate.test(skuList.get(I))){lElectronicsList.add(skuList.get(I))。lElectronicsList; }}

 

述語インタフェース:

パッケージcom.imooc.zhangxiaoxi.lambda.cart; / **  *動詞インターフェース* / パブリックインターフェイスSkuPrediCate { ブールテスト(SKU SKU);}


 

 

 

テストカテゴリ:

パッケージcom.imooc.zhangxiaoxi.lambda.cart; 

インポートcom.alibaba.fastjson.JSON;
 インポートorg.junit.Test; 

インポートはjava.util.List; 

パブリック クラスVersionTestE { 

    @Test 
   公共 無効filterSkuListByParam(){ 
       一覧 <SKU> = skuList CartService.getSkuList(); 

        / ** 
         1000年より*クエリ匿名内部クラスを使用して、合計より大きい
         * / 
        リスト <SKU> getParamSkuList = CartService.filterSkuListByParamPrediCate(skuList、新しい新SkuPrediCate(){ 
            @Override 
            公共 ブールテスト(SKU SKU) {
                 リターンsku.getTotalPrice()> 1000年; 
            } 
        })。
        System.out.println(JSON.toJSONString(getParamSkuList、)); 
    } 

}

 

ログを出力します:

[ 
    {
         "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 
    } 
] 
プロセスの終了コードで終了 0

 

おすすめ

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