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からの振替