ホームページ >Java >Java 8 ストリームは 3 つのフィールドでグループ化し、他の 2 つのフィールドを合計で集計します

Java 8 ストリームは 3 つのフィールドでグループ化し、他の 2 つのフィールドを合計で集計します

PHPz
PHPz転載
2024-02-22 13:46:061002ブラウズ

php エディター Strawberry は、Java 8 での 3 つのフィールドによるストリームのグループ化と、合計による他の 2 つのフィールドの集計に関する質問と回答を提供します。 Java プログラミングでは、ストリームはコレクションを処理する新しい方法であり、ストリームを使用することで、データをより便利に操作および処理できます。この記事では、Java 8 のストリーム関数を使用して 3 つのフィールドでグループ化し、残りの 2 つのフィールドを合計集計する方法を詳しく紹介します。この興味深い質問を一緒に考えてみましょう。

質問の内容

私は Java 8 を初めて使用するため、同様の質問で提供されている解決策を実装するのが困難です。助けてください。

Java 8 で、残りの 2 つの整数フィールドを合計する必要がある複数の行を返す 3 つのフィールドでグループ化する方法。 以下の dto/pojo クラスでは、uuid、msgdate、チャネルの組み合わせの一意のキーに基づいて、受信カウント フィールドと送信カウント フィールドを合計する必要があります。

リーリー

//例としての初期化リスト。

リーリー

出力オブジェクトには次のデータが含まれている必要があります:

uuid msgdate チャネル受信数送信数

c9c3a519 2023 年 12 月 番号 8 3

c9c3a519 2023 年 11 月 番号 4 4

c9c3a519 2023 年 12 月マニュアル 8 3

c9c3a519 2023 年 11 月マニュアル 4 4

...

...

...

解決策

結果をマップに収集します。この例では、Collectors.toMap(keyMapper, valueMapper, mergeFunction, mapFactory) を使用します。

また、簡潔にするために、ロンボク注釈を使用します。

まず、グループ化するキーと集計データを表すクラスを作成します:

リーリー リーリー

次に、さらに 2 つのメソッドを使用して reportdata を拡張し、キーと初期集計を作成します。 リーリー

そしてデータを収集します:

リーリー

コレクターのパラメーターは次のとおりです:

  1. reportdata::createkey - グループ化するキーを作成します (マップのキー)
  2. reportdata::createcount - 単一の reportdata (マップの値) から初期集計 を作成します。
  3. count::merge - キーの競合が発生した場合、2 つの count (マージ メソッドを参照) をマージします。
  4. linkedhashmap::new - 結果の挿入に使用される map のファクトリ。挿入順序を保持したいのですが、必要ない場合はパラメータを省略してデフォルトのファクトリを使用できます。
印刷:

リーリー

以上がJava 8 ストリームは 3 つのフィールドでグループ化し、他の 2 つのフィールドを合計で集計しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。