Iterar lista totalizando valores

4 respostas
K

Pessoal,

no meu código eu estou trazendo uma collection com vários objetos(pagamentoVO) dentro.

Nesse VO que está vindo na collection, um dos atributos é o campo “valor original” e “idMorador”.

O que eu quero fazer é o seguinte:

totalizar o “valor original” por moradores. Ou seja, quando eu itero a lista e vejo que o idMorador mudou, eu quero guardar esse valor para apresentar na jsp.

meu código está assim

/** Trazendo a lista carregada de PagamentoVO*/
listaInadimplenciaGeral = facade.listaGeralInadimplencia(pagamentoVO);

Iterator it = listaInadimplenciaGeral.iterator();   

double totalGeral = 0.0;

double totalMorador = 0.0;

/**variavel que irá fazer o controle de moradores para calcular seu total */
      int mor = 0;
      int aux = 0;
      
      while(it.hasNext())
      {
        pagamentoVO = (PagamentoVO)it.next();    
          
        double valor = pagamentoVO.getPagamentoBean().getValorOriginal();    
        mor = pagamentoVO.getPagamentoBean().getMoradorBean().getIdMorador();
       
        if(mor != aux)
        {
          totalMorador = 0.0;
          aux = mor;
        }

        /**Totaliza o valor da inadimplência do morador */
        totalMorador+= valor;
        
        /**Totaliza o valor da inadimplência geral */
        totalGeral+= valor;   


request.setAttribute(Form.TOTAL_GERAL, String.valueOf(totalGeral));
      request.setAttribute(Form.TOTAL_GERAL_MORADOR, String.valueOf(totalMorador));
      request.setAttribute(Form.LISTA_INADIMPLENCIA, listaInadimplenciaGeral);

Até aqui, tudo acontece como é para acontecer, exceto a variavel “totalMorador” que me apresenta somente o total do ultimo morador da lista…sendo que todo morador tem seu total.

Pensei em fazer o seguinte:

Toda vez que verificar se o morador é diferente, criar uma collection.
E qdo entrar no Iterator, setar todos os valores no VO e adicionar o VO na collection. Porque dessa forma eu trabalharia sem problemas na jsp.

Mas agora vem a minha dúvida:

Esse trabalhão todo não vai ser prejudicial quando a consulta me retornar uma lista mto carregada?

Não existe outra forma de pegar o valor total do morador quando o id for diferente?

Agradeço quem puder me ajudar…

4 Respostas

gilliard_santos

Nao sei se entendi bem o teu problema (é bem provavel que nao :lol: )
mas voce poderia usar um Map pra guardar as informacoes de total de cada morador separadinho, aí quando voce for pegar o valor do morador X, se ele nao tiver no Map vc busca e coloca o valor no Map, senao simplesmente voce devolve o valor que voce ja calculou antes. Aí tem que ver com que frequencia esses valores precisam ser atualizados, e com isso voce ve também em que escopo voce guarda esse seu Map.

K

gilliard,

eu pensei em usar o map, mas pelo q vc ta me dizendo…eu vou ter q usar scriptlet na jsp…

e essa não eh a minha intenção, sendo que eu estou usando JSTL

nao quero misturar as duas coisas.

gilliard_santos

Nao precisa de scriplet nao, vc consegue acessar um map com jstl (pelo menos dentro do que me lembro :lol: )

voce acessa seu map ± assim

<c:forEach items = "${clientes}" var="cliente">
  <c:out value="${seuMap[cliente].nome}" />
</c:forEach>
K

brigadao Gilliard

mas eu consegui resolver de outra maneira…ataquei para o lado da collection mesmo…

iterei uma lista para buscar os valores (q eu precisava somar), realizei o calculo e adicionei elas em outra lista…para pegar na jsp…

como eu nao preciso desse campo em nenhum outro lugar do meu sistema, nao criei ele no vo, e para fazer isso…eu iterava uma lista dentro a outra.

Deu certo já…

valew

Criado 30 de novembro de 2006
Ultima resposta 1 de dez. de 2006
Respostas 4
Participantes 2