いくつかのデータ処理を実現するために、シンプルで効率的なコードを使用して新しい機能を使用してJava8

Appleは、ターゲットを定義しました。

パブリッククラスアップル{
    プライベート整数ID。
    プライベート文字列名;
    プライベートBigDecimalのお金。
    プライベート整数NUM;
    公共アップル(整数のID、文字列名、BigDecimalのお金、整数NUM){
        this.id = ID;
        this.name =名前;
        this.money =お金。
        this.num = NUM;
    }
}
添加一些测试数据:
リスト<アップル> appleList =新しいArrayListを<>(); //存放リンゴ对象集合
 
アップルapple1 =新しいApple(1、 "苹果1"、新BigDecimalを( "3.25")、10);
アップルapple12 =新しいApple(1、 "苹果2"、新BigDecimalを( "1.35")、20)。
アップルapple2 =新しいApple(2、 "香蕉"、新BigDecimalを( "2.89")、30);
アップルapple3 =新しいApple(3、 "荔枝"、
 
appleList.add(apple1)。
appleList.add(apple12)。
appleList.add(apple2)。
appleList.add(apple3)。

図1に示すように、パケットは、
属性にまとめ、内部リスト要素オブジェクト、例えば、パケットIDに、同じ一緒のID:

//リスト以ID分组地図<Integer型、リスト<アップル>>
地図<Integer型、リスト<アップル>> GROUPBY = appleList.stream()(Collectors.groupingBy(アップル::のgetId))を集めます。
 
System.err.println( "GROUPBY:" + GROUPBY)。
{1 = [アップル{ID = 1、名前= '苹果1'、お金= 3.25、NUM = 10}、アップル{ID = 1、名前= '苹果2'、お金= 1.35、NUM = 20}]、2 = [アップル{ID = 2、NAME = '香蕉'、お金= 2.89、NUM = 30}]、3 = [アップル{ID = 3、NAME = '荔枝'、お金= 9.99、NUM = 40}]}

2、リストは地図を転送
上記のキー、リンゴのオブジェクト値としてIDを述べ、あなたがこれを行うことができます:

/ **
 *リスト- >地図
 *なお:
 * toMapコレクションオブジェクトを重複したキーが存在する場合、文句を言うでしょう....キー重複
 *のapple1は、apple12のIDは1です。
 (K1、K2)することができます* - > K1が設定されている重複キーがある場合は、KEY1、KEY2を破棄保持されます
 * /
地図<Integer型、アップル> appleMap = appleList.stream()コレクト(Collectors.toMap(アップル:. :のgetId、 - > A、 (K1、K2) - > K1));
印刷appleMap
{1 =アップル{ID = 1、名前= 'りんご1'、お金= 3.25、NUM。。 = 10}、2 =アップル{ ID = 2、NAME = 'バナナ'、お金= 2.89、NUM = 30}、3 =アップル{ID = 3、NAME = ' ライチ'、お金= 9.99、NUM = 40}}

3、フィルターフィルター
コレクション要素から除外さは一致します。

//は、必要なデータを表示する
<アップル> filterList = appleList.stream(リスト )フィルタ( - )> a.getNameを(( "等しいバナナ")。)コレクト(Collectors.toList()); ...
 
システム。 err.println( "FilterList:" FilterList +);
[{アップルID = 2、NAME = 'バナナ'、お金= 2.89、NUM = 30}]

4.合計する
属性の合計に応じてデータセットを:

//计算总金额
。BigDecimalのtotalMoney = appleList.stream()マップ(アップル:: getMoney).reduce(BigDecimal.ZERO、BigDecimalを::追加)。
System.err.println( "totalMoney:" + totalMoney)。//totalMoney:17.48


5.最大値と最小フロー検索
計算された最大または最小流れCollectors.maxByとCollectors.minByを。


オプション<料理> maxDish = Dish.menu.stream()。
      (Collectors.maxBy(Comparator.comparing(ディッシュ:: getCaloriesを)))を収集。
maxDish.ifPresent(のSystem.out ::のprintln)。
 
オプション<料理> minDish = Dish.menu.stream()。
      (Collectors.minBy(Comparator.comparing(ディッシュ:: getCaloriesを)))を収集。
minDish.ifPresent(のSystem.out ::のprintln)。


重6.去
インポート静的java.util.Comparator.comparingLong。
輸入静的java.util.stream.Collectors.collectingAndThen。
輸入静的java.util.stream.Collectors.toCollection。
 
//根据ID去の重の
     一覧<人>ユニーク= appleList.stream()を収集(。
                collectingAndThen(
                        toCollection(() - >新しいTreeSetの<>(comparingLong(アップル::のgetId)))、ArrayListの)::新
        )。

 

次の表は、静的ファクトリメソッドコレクタークラスを示しています。

ファクトリメソッドの戻り値の型の役割
ToListメソッドリスト<T>一覧に収集したすべての項目ストリーミングする
設定toset <T>セットに収集したすべての項目をストリーミングすると、重複削除
与えるために収集したすべての項目をストリーミングするtoCollectionコレクション<T>をmenuStream.collect(toCollection()、ArrayListの::設定新しい) 作成するために、所与の供給源を
カウントするロング内の要素の数を数えるのストリーム
合計対流sumInt整数整数属性項目
平均averagingIntダブル整数アイテムを流動特性を計算します値
summarizingIntのIntSummaryStatisticsは、最大値、最小値、合計値、平均として流れ整数プロパティ項目に関する統計、収集
コレクト((接合「」))のtoStringストリーム生成された文字列内の各アイテムの接合列の呼接続方法
maxByオプション<T>指定された最大の要素任意コンパレータのパッケージに応じて、ストリームが選択され、またはストリームが空である場合に比べOptional.empty()
minByオプション<T>指定されたコンパレータで選択されたパッケージの流れオプションの最小の要素、またはストリームが空の場合 Optional.empty()
INT totalCalories = menuStream.collect(還元(0累積単一の値の周り一緒に流れるように、還元型還元操作は、要素BinaryOperator個々に合わせたストリームの使用開始からアキュムレータの初期値として生成し 、皿:: getCalories、整数:: SUM));
collectingAndThen変換機能が別のコレクタにパッケージのタイプを返し、そのアプリケーションhowManyDishes = menuStream.collect関数int(collectingAndThen(ToListメソッド()、リスト::サイズ))の変換結果
groupingBy地図<K 、リスト<T >>属性項目対流項目の値に応じてQとして設定し、マップキーの結果として属性値を
partitioningBy地図<ブール、リスト<T >> 各項目に従って適用結果対流述語プロジェクトを分割します

 

https://blog.csdn.net/qq_33609401/article/details/84862721からの振替

おすすめ

転載: www.cnblogs.com/luizw/p/10978188.html