質問するログイン新規登録

回答編集履歴

1

Tupleを使う3引数のCollectors.reducing

2021/09/11 12:17

投稿

xebme
xebme

スコア1109

answer CHANGED
@@ -48,6 +48,8 @@
48
48
  - 分類キーの各項目の長さが揃っていること(TreeMapを使うため)
49
49
  - numberはint型。集計結果が桁溢れしないこと
50
50
 
51
+ **Tupple**
52
+
51
53
  桁溢れする場合は専用の集計レコードを用意する必要があります。タプルが使える言語(Scala,Kotlin)なら、次と同等なタプルをクラスを定義せずに使えます。タプルの`_2`を集計に使います。
52
54
 
53
55
  ```
@@ -63,7 +65,16 @@
63
65
  Tuple<Item,Long> sum = new Tuple(new Item("99-999-999","","","",0),0l);
64
66
  ```
65
67
 
68
+ **Tuppleを使う3引数の`Collectors#reducing`**
66
69
 
70
+ ```Java
71
+ Collectors.reducing(
72
+ new Tuple<Item,Long>(new Item("99-99-999", "", "", "", 0), 0l),
73
+ x -> new Tuple<>(x, (long)x.number),
74
+ (a, i) -> new Tuple<>((a._1.orderId.compareTo(i._1.orderId) > 0) ? i._1: a._1, a._2 + i._2)
75
+ )
76
+ ```
77
+
67
78
  **SQL の group by**
68
79
 
69
80
  SQL標準では、group by のselect 項目に、グルービング項目と集計関数以外の項目、この場合は`orderId`、は指定できません。データベース製品の機能拡張になります。MySQLだと、SQL-MODEに標準準拠を指定するとエラーになります。