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