JSF datatable registros duplicados

Boa noite, preciso de uma ajuda.
Tenho a seguinte situação:

tenho que eliminar os meses duplicados, já que só há 2 meses ai, os 2 ultimos.
e preciso somar os valores daquele mês, alguem me da uma luz.

Estou utilizando java, jsf, primefaces consumindo uma api rest

Faça uma consulta usando SUM e agrupada pelo mês.

1 curtida

você pode me mostrar um exemplo de como seria essa consulta?

Não sei qual banco está usando, mas é algo mais ou menos assim:

SELECT id, EXTRACT(month FROM data) as mes, SUM(custoTotal)
FROM SuaTabela
GROUP BY id, EXTRACT(month FROM data)

não estou usando base de dados, estou jogando do json direto no objeto com gson, e mostrando no datatable do primeface

hmmm. Informação importante. Como vc está carregando os dados desse json para ser apresentado na tela?

aqui está o json que estou querendo somar os valores: https://dadosabertos.camara.leg.br/api/v2/deputados/204554/despesas?mes=3&mes=2&ordem=DESC&ordenarPor=dataDocumento

eu tenho que pegar os daods dos 2 ultimos meses (que já esta na url) e somar os valores de casa mes, no caso mostraria 2 valores: mes 2 - valor tanto total, mes 3 - valor tanto total.

Eu estou usando o gson para transformar o json em objeto, e então transformo em uma lista e mostro da datatable

Esse link abre uma estrutura XML e não JSON. Sobre fazer o agrupamento na lista, vc pode usar lambda para isso, veja:

Map<Integer, Double> collect = itens.stream().collect(Collectors.groupingBy(Item::getMes, Collectors.summingDouble(Item::getValor)));

Porém, a função de agrupar retorna um Map. No meu exemplo, o key do map é o mês e o value é o valor somado.

1 curtida

esqueci de por &formato=json no final…
https://dadosabertos.camara.leg.br/api/v2/deputados/204554/despesas?mes=3&mes=2&ordem=DESC&ordenarPor=dataDocumento&formato=json

vou testar a solução.

1 curtida

Tá funcionou, e desde já obrigado.
Agora vem a luta de como conseguir mostrar na datatable ou como outputLabel mesmo no primefaces

1 curtida