Данные выглядят примерно так
head child assigned total
[ Mas Mas1 2 5
, Mas Mas2 0 5
, Usr usr1 4 4
, Usr usr2 1 3
, Inv Inv1 3 5
, Inv Inv2 2 3
, Inv Inv3 2 3
, Inv Inv4 1 3
]
Я хочу получить сумму их дочернего элемента для определенного заголовка.
Я использую раздел в sql
select head,
SUM(childAssigned) over (partition by am.acl_group) as assignedHead,
sum(childTotal) over (partition by am.acl_group) as totalHead,
child,
childAssigned,
childTotal
Поскольку "разбиение по" не поддерживается HQL astquerytranslatorfactory, я использую его как собственный запрос
У меня есть класс, который содержит ответ SQL
class AclList{
String head;
Integer assignedHead;
Integer totalHead;
String child;
Integer assignedChild;
Integer totalChild;
}
Данные выглядят примерно такthis
[ Mas 2 10 Mas1 2 5
, Mas 2 10 Mas2 0 5
, Usr 5 7 usr1 4 4
, Usr 5 7 usr2 1 3
, Inv 8 14 Inv1 3 5
, Inv 8 14 Inv2 2 3
, Inv 8 14 Inv3 2 3
, Inv 8 14 Inv4 1 3
]
Мне нужен ответ, который будет группировать дочерний элемент того же заголовка.
Ответ должен быть похож на ResponseClass (тип, назначенный, всего, список)
[
{
"type":"MAS",
"assigned":"2",
"total":"10",
"subType":[
{
"type":"MAS1",
"assigned":"2",
"total":"5"
},
{
"type":"MAS2",
"assigned":"0",
"total":"5"
}
]
},
{
"type":"USR",
"assigned":"5",
"total":"7",
"subType":[
{
"type":"USR1",
"assigned":"4",
"total":"4"
},
{
"type":"USR2",
"assigned":"1",
"total":"3"
}
]
}
]
Сведения о классе (тип, назначено, всего) Мой подход заключается в том, чтобы сохранить заголовок в ключе hashmap, потомок в значении hashmap Так как все 3 столбца заголовка одинаковы, поэтому, равняется, заботится о hashcode.
class ChildDetails (List) HashMap
Iterate sql response
if hashmap.contains(head) //exist
fetch value, add new one in list
hashmap.put(head, updated)
else
create header,
create child, add it to a blank list
hashmap.put(head, new list)
Снова итерируйте hashmap, разместите его в новом ответе json
Но это громоздкий и неэффективный процесс.
Есть ли он в любом случае? сделано с потоком JAVA ()?