回答編集履歴
1
Tupleを使う3引数のCollectors.reducing
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に標準準拠を指定するとエラーになります。
|