Lógica com arrayList

Boa tarde pessoal, estou com um problema de lógica que é se resume ao seguinte:

Tenho uma lista com os seguintes valores:

valorFisicoReal=460.0, codInsumoObra=2067,
{valorFisicoReal=572.0, codInsumoObra=23561,
{valorFisicoReal=381.0, codInsumoObra=35548,
{valorFisicoReal=31064, codInsumoObra=999999,
{valorFisicoReal=145.0, codInsumoObra=23561,
{valorFisicoReal=23974.37, codInsumoObra=999999,
{valorFisicoReal=16793.7141, codInsumoObra=23561,
{valorFisicoReal=13003.83, codInsumoObra=35548,
{valorFisicoReal=40.0, codInsumoObra=23561,
{valorFisicoReal=40.0, codInsumoObra=23561,

Preciso agrupar os valores por CodInsumoObra mas não estou conseguindo. Se alguem puder ajudar, agradeço muito.

nao entendi, voce precisa pegar todos os valores igual ao valor inserido na busca??

ex. 23561, tem que aparecer

145.0, 16793.7141, 40.0, 40.0
???

[quote=vinicius.maferreira]Boa tarde pessoal, estou com um problema de lógica que é se resume ao seguinte:

Tenho uma lista com os seguintes valores:

valorFisicoReal=460.0, codInsumoObra=2067,
{valorFisicoReal=572.0, codInsumoObra=23561,
{valorFisicoReal=381.0, codInsumoObra=35548,
{valorFisicoReal=31064, codInsumoObra=999999,
{valorFisicoReal=145.0, codInsumoObra=23561,
{valorFisicoReal=23974.37, codInsumoObra=999999,
{valorFisicoReal=16793.7141, codInsumoObra=23561,
{valorFisicoReal=13003.83, codInsumoObra=35548,
{valorFisicoReal=40.0, codInsumoObra=23561,
{valorFisicoReal=40.0, codInsumoObra=23561,

Preciso agrupar os valores por CodInsumoObra mas não estou conseguindo. Se alguem puder ajudar, agradeço muito.[/quote]

Você quer dizer que uma determinada variável do seu objeto da lista repete e isso não deveria ocorrer, é isso ?

denisspitfire, eu tenho um HashMap com esses valores dentro de um foreach, dentro dessa lista de resultado, tenho vários CodInsumo que se repetem. Preciso ter esse valor somado pelo CodInsumoObra para poder no final realizar cálculos com ele. Entendeu?

Eu não entendi.

Vamos supor que você tenha três “CodInsumo” que se repetem na sua lista. Você precisa pegar os três, soma-los para obter um resultado final.
Então, se tiver três “CondInsumo” com valor “5”, no final, terá um único objeto com valor 15. Basicamente, é isso ?

Nessa lista:

valorFisicoReal=460.0, codInsumoObra=2067,
[color=red]{valorFisicoReal=572.0, codInsumoObra=23561,[/color]
{valorFisicoReal=381.0, codInsumoObra=35548,
{valorFisicoReal=31064, codInsumoObra=999999,
[color=red]{valorFisicoReal=145.0, codInsumoObra=23561,[/color]
{valorFisicoReal=23974.37, codInsumoObra=999999,
[color=red]{valorFisicoReal=16793.7141, codInsumoObra=23561,[/color]
{valorFisicoReal=13003.83, codInsumoObra=35548,
[color=red]{valorFisicoReal=40.0, codInsumoObra=23561,[/color]
[color=red]{valorFisicoReal=40.0, codInsumoObra=23561,[/color]

tenho, exemplo o codInsumoObra = 23561 repetido 3 vezes. Preciso pegar os valores e soma-los:
EXEMPLO: Preciso da soma dos itens em vermelho…

nel, exatamente isso…

Uma forma que me veio a cabeça agora (rapidamente), é tu usar um outro Map, tendo como chave o ‘codInsumoObra’ e valor uma lista.
Então, para cada objeto da sua lista, você verifica se já existe o ‘codInsumoObra’ no Map, se existir, recupera a lista e adiciona mais um valor, caso não exista, cria uma nova chave e adiciona uma lista com somente um objeto.

No final, basta percorrer o Map e somar os valores da lista. Isso não resolve?
Com certeza há implementações melhores, mas ai precisaria de calma para pensar rs

nel, como eu faria para percorrer o map e somar os valores com códigos iguais? Sendo que no final preciso ter os valores separados desta maneira:
Pois preciso dessa soma para calcular o porcentagem de cada item…
Agradeço as respostas!!!

cod 1234, valor 1000
cod 1235, valor 100
cod 9999, valor 500

No final, eu pego um valor PREVISTO, exemplo 2.500 e divido por cada item acima para saber a porcentagem executada real.

[quote=vinicius.maferreira]nel, como eu faria para percorrer o map e somar os valores com códigos iguais? Sendo que no final preciso ter os valores separados desta maneira:
Pois preciso dessa soma para calcular o porcentagem de cada item…
Agradeço as respostas!!!

cod 1234, valor 1000
cod 1235, valor 100
cod 9999, valor 500

No final, eu pego um valor PREVISTO, exemplo 2.500 e divido por cada item acima para saber a porcentagem executada real.[/quote]

Ou não estou conseguindo assimilar a explicação ou você está se atrapalhando na explicação.
Vamos lá, no início me disse que precisa somar os valores dos que se repetem, nesse exemplo que deu agora, nenhum código se repete, logo, nada é somado, correto?
Se fosse assim:

cod 1235, valor 1000
cod 1235, valor 100
cod 9999, valor 500

O valor seria: 1100. Correto ? Pois somamos o valor de dois códigos repetidos. Se não repetem, beleza, não soma-se nada. Então, é isso, não é ? Consegue explicar com calma o que quer ? :slight_smile:

A ideia do Map não é “sumir” com os valores atuais, apenas um modo de agrupar os repetidos. Estava pensando, não precisa sequer ser uma lista, inclusive, antes de adicionar ao Map já soma-se. Se tu tem um valor, extrai, soma e adiciona novamente.

nel, a minha lógica assim:

[code]
ArrayList testeCodigo = new ArrayList();

novoValorFisicoReal = 0.0;
				
	if (!testeCodigo.contains(codIsumoObra)){
				
	    for (int i = 0; i < taxas.size(); i++) {
			if (codIsumoObra.equals("999999")){
				continue;
							
			} else {
				if (taxas.get(i).get("codInsumoObra").equals(codIsumoObra)){
					novoValorFisicoReal += (Double) taxas.get(i).get("valorFisicoReal");
				}
			}
						
			if (taxas.size()-1 == i){
				testeCodigo.add(codIsumoObra);
			}
					
		}
	} else {
		continue;
	}

Muito Obrigado pelas idéias!!!!