最小および最大によるJava8ストリームグループ

ジュリアン

従業員テーブルに対してSQLクエリを実行するとします。

SELECT department, team, MIN(salary), MAX(salary)
  FROM employees
 GROUP BY department, team

また、Javaクライアントでは、Aggregate次のようにDAO呼び出しを行うことにより、結果セットをインスタンスのリストにマップします。

List<Aggregate> deptTeamAggregates = employeeDao.getMinMaxSalariesByDeptAndTeam()

また、「Aggregate」には、部門、チーム、minSalary、maxSalaryのゲッターメソッドがあり、Pair<T, T>タプルがあります

結果セットを以下の2つのマップにマップするための、最も明確で可能な限り最適な方法は何でしょうか。

Map<String, Pair<Integer, Integer>> byDepartmentMinMax = ...
Map<Pair<String, String>, Pair<Integer, Integer>> byDepartmentAndTeamMinMax  = ...

結果セットを別の方法でマッピングしたり、データベースに2回アクセスして同じことを簡単に実現したりできることはわかっていますが、Java8の機能を理解することに重点を置いています。

よろしくお願いします。

saka1029
    class Pair<T, U> {
        public final T x;
        public final U y;

        public Pair(T x, U y) {
            this.x = x;
            this.y = y;
        }
    }

    Collector<Aggregate, ?, Pair<Integer, Integer>> aggregateSalary = 
        mapping(a -> new Pair<>(a.getMinSalary(), a.getMaxSalary()),
            reducing(new Pair<>(Integer.MAX_VALUE, Integer.MIN_VALUE),
                (a, b) -> new Pair<>(Math.min(a.x, b.x), Math.max(a.y, b.y))));

    Map<String, Pair<Integer, Integer>> byDepartmentMinMax =
        deptTeamAggregates.stream()
            .collect(groupingBy(a -> a.getDepartment(), aggregateSalary));

    Map<Pair<String, String>, Pair<Integer, Integer>> byDepartmentAndTeamMinMax =
        deptTeamAggregates.stream()
            .collect(toMap(a -> new Pair<>(a.getDepartment(), a.getTeam()), a -> new Pair<>(a.getMinSalary(), a.getMaxSalary())));

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

jooqおよびjava8ストリームSQL生成

分類Dev

jooqおよびjava8ストリームSQL生成

分類Dev

Java8ストリームintおよび整数

分類Dev

Java8コンプレックスストリームフィルターおよびvsまたは

分類Dev

オプションの属性によるJava8ストリームのグループ化

分類Dev

列からの最大および最小整数によるデータフレームのグループ化

分類Dev

ストリームを使用して複数の属性でグループ化およびソート:Java 8

分類Dev

Java8ストリームを使用してプリミティブ戻り値の型をマップおよび収集する方法

分類Dev

最小および最大ループ

分類Dev

SQLクエリの最小および最大グループ化フラグ

分類Dev

java8のストリームgroupingbyを使用した文字列のコレクションによるグループ化

分類Dev

クロスグループ化および最大日付スクリプト

分類Dev

Java8ストリームflatMapおよびgroupbyコードコンパイラエラー

分類Dev

JavaストリームでMaxByを使用してグループ化および集計する方法

分類Dev

ストリームを使用してJavaマップを変換およびフィルタリングする

分類Dev

最大、最小、平均、および日付を使用したSQLによるグループ化

分類Dev

JavaおよびScalaの最小および最大ヒープ

分類Dev

Java8およびビルドツールバージョン25にアップグレードした後にAndroidテストケースが失敗する

分類Dev

Javaの8 - ストリーム - 値によってグループと分と、そのオブジェクトの最大値を見つけると、

分類Dev

マージオブジェクトまたは集約によりグループ化java8ストリーム

分類Dev

dplyrを使用してグループ化するときに、平均、最小、および最大を計算する方法は?

分類Dev

Java8ストリーム-フィルターおよびマップメソッドとは異なる動作をするソートされたメソッドの実行基準

分類Dev

合計条件によるJava8グループ

分類Dev

合計条件によるJava8グループ

分類Dev

java8ストリームを使用してtoMapをtoListにグループ化する方法

分類Dev

Java8ストリームによる任意のクラスタイプの削減

分類Dev

によってグループ化Javaの8ストリームの複数

分類Dev

Java 8-ストリーム、フィルター、およびオプション

分類Dev

Java8ストリームとリストのグループ化

Related 関連記事

  1. 1

    jooqおよびjava8ストリームSQL生成

  2. 2

    jooqおよびjava8ストリームSQL生成

  3. 3

    Java8ストリームintおよび整数

  4. 4

    Java8コンプレックスストリームフィルターおよびvsまたは

  5. 5

    オプションの属性によるJava8ストリームのグループ化

  6. 6

    列からの最大および最小整数によるデータフレームのグループ化

  7. 7

    ストリームを使用して複数の属性でグループ化およびソート:Java 8

  8. 8

    Java8ストリームを使用してプリミティブ戻り値の型をマップおよび収集する方法

  9. 9

    最小および最大ループ

  10. 10

    SQLクエリの最小および最大グループ化フラグ

  11. 11

    java8のストリームgroupingbyを使用した文字列のコレクションによるグループ化

  12. 12

    クロスグループ化および最大日付スクリプト

  13. 13

    Java8ストリームflatMapおよびgroupbyコードコンパイラエラー

  14. 14

    JavaストリームでMaxByを使用してグループ化および集計する方法

  15. 15

    ストリームを使用してJavaマップを変換およびフィルタリングする

  16. 16

    最大、最小、平均、および日付を使用したSQLによるグループ化

  17. 17

    JavaおよびScalaの最小および最大ヒープ

  18. 18

    Java8およびビルドツールバージョン25にアップグレードした後にAndroidテストケースが失敗する

  19. 19

    Javaの8 - ストリーム - 値によってグループと分と、そのオブジェクトの最大値を見つけると、

  20. 20

    マージオブジェクトまたは集約によりグループ化java8ストリーム

  21. 21

    dplyrを使用してグループ化するときに、平均、最小、および最大を計算する方法は?

  22. 22

    Java8ストリーム-フィルターおよびマップメソッドとは異なる動作をするソートされたメソッドの実行基準

  23. 23

    合計条件によるJava8グループ

  24. 24

    合計条件によるJava8グループ

  25. 25

    java8ストリームを使用してtoMapをtoListにグループ化する方法

  26. 26

    Java8ストリームによる任意のクラスタイプの削減

  27. 27

    によってグループ化Javaの8ストリームの複数

  28. 28

    Java 8-ストリーム、フィルター、およびオプション

  29. 29

    Java8ストリームとリストのグループ化

ホットタグ

アーカイブ