Criação de listas a partir de outra lista

3 respostas
M

Olá1

Podem me ajudar com uma questão simples, porém difícil pra mim que estou iniciando?
Devo percorrer uma lista com elementos repetidos e que diferem em apenas uma propriedade e gerar uma lista nova sem elementos repetidos, unindo as propriedades diferentes.
Já tentei usar hashset que sei que não aceita repetição. Mas daí fiquei sem saber o que fazer para unir as propriedades que são diferentes.

Abaixo colei minha última alternativa... tentei fazer na mão mas o resultado não está correto.

O método que me tirou o sono é este:

private List tratarCategoria(List listaVO, String nomeCidade) {
		List listaPort = listaVO;
		List retorno = new ArrayList();
		
		Iterator iterListaVO = listaVO.iterator();
		Iterator iterListaPort = listaPort.iterator();
		
		DadosRetornoConsultaVO desconto = null;
		DadosRetornoConsultaVO dadosRetornoVO = null;
		DadosRetornoConsultaVO descontoRetorno = null;
		
		while (iterListaVO.hasNext()) {
			desconto = (DadosRetornoConsultaVO) iterListaVO.next();
			while (iterListaPort.hasNext()) {
				dadosRetornoVO = (DadosRetornoConsultaVO) iterListaPort.next();
				if (!desconto.getAgravamento().equals("Não há")) {
					if (desconto.getAgravamento().equals(dadosRetornoVO.getAgravamento())) {
						desconto.setCategoriaTarifaria(desconto.getCategoriaTarifaria() +", "+dadosRetornoVO.getCategoriaTarifaria());
					}
				}
				if (!desconto.getDesconto().equals("Não há")) {
					if (desconto.getDesconto().equals(dadosRetornoVO.getDesconto())) {
						desconto.setCategoriaTarifaria(desconto.getCategoriaTarifaria() +"," + dadosRetornoVO.getCategoriaTarifaria());
					}
				}
			}
			for (int x = 0; x < retorno.size(); x++) {
				descontoRetorno = (DadosRetornoConsultaVO)retorno.get(x);
				if (!descontoRetorno.getAgravamento().equals("Não há")) {
					if(!desconto.getAgravamento().equals("Não há")) {
						if(descontoRetorno.getAgravamento().equals(desconto.getAgravamento())) {
							if (descontoRetorno.getCategoriaTarifaria().indexOf(desconto.getCategoriaTarifaria()) < 0) {
								descontoRetorno.setCategoriaTarifaria(descontoRetorno.getCategoriaTarifaria() + "," + desconto.getCategoriaTarifaria());
								retorno.set(x, descontoRetorno);
							}
						}
						else {
							retorno.add(desconto);
						}
					}
				}
				
				if (!descontoRetorno.getDesconto().equals("Não há")) {
					if(!desconto.getDesconto().equals("Não há")) {
						if(descontoRetorno.getDesconto().equals(desconto.getDesconto())) {
							if (descontoRetorno.getCategoriaTarifaria().indexOf(desconto.getCategoriaTarifaria()) < 0) {
								descontoRetorno.setCategoriaTarifaria(descontoRetorno.getCategoriaTarifaria() + "," + desconto.getCategoriaTarifaria());
								retorno.set(x, descontoRetorno);
							}
						}
						else {
							retorno.add(desconto);
						}
					}
					else {
						if(descontoRetorno.getDesconto().equals(desconto.getDesconto())) {
							if (descontoRetorno.getCategoriaTarifaria().indexOf(desconto.getCategoriaTarifaria()) < 0) {
								descontoRetorno.setCategoriaTarifaria(descontoRetorno.getCategoriaTarifaria() + "," + desconto.getCategoriaTarifaria());
								retorno.set(x, descontoRetorno);
							}
						}
						else {
							retorno.add(desconto);
						}
					}
				}

			}
			if (retorno.size() == 0) {
				retorno.add(desconto);
			}
		}
		return retorno;
	}

Um exemplo de item da listaVO está abaixo:

DescontoPromocionalEAgravoAutomovelVO d6 = new DescontoPromocionalEAgravoAutomovelVO();
		d6.setCodigoCategTarifaria(21);
		d6.setCodigoClasseBonus(0);
		d6.setCodigoClasseLocalizacao(0);
		d6.setCodigoCondicaoEspecial(39);
		d6.setCodigoMarcaVeiculo(0);
		d6.setCodigoModeloVeiculo(0);
		d6.setCodigoSubClasseLocaliz(1);
		d6.setCodigoTipoVeiculo(0);
		d6.setFaixaAnoModeloVeiculo(99);
		d6.setFlagDescPremio(' ');
		d6.setIdadeSegurado(0);
		d6.setMarcaVeiculo("Todas");
		d6.setModeloVeiculo("teste");
		d6.setNumConvenio(0);
		d6.setPercentualDesconto(-30.0);
		d6.setTabNum(309);
		d6.setTipoPessoa('J');
		d6.setTipoProdutoDesconto(5);
		d6.setTipoProposta(0);
		d6.setTipoVeiculo("TESTE");
		d6.setUltimaAtualizacao(null);
		dadosFake.add(d6);

Existem elementos repetidos como o que está acima só com o campo categoriaTarifaria diferentes. E é justamente esse campo que devo ir contatenando para ter só um objeto (que antes aparecia repetido) mas com várias categorias, pois o campo é String.

Ajuda Please!!!!

3 Respostas

davidbuzatto

Mas você quer unir as propriedades diferentes de quem?
Vc precisa se basear em algo.

Vamos supor, uma class Pessoa, se duas pessoas tem o mesmo nome, cria um nova pessoa com esse nome e soma as idades. Seria isso? Aqui to falando do nome, mas o q vc precisa em questão? Vc precisa saber quem vai ser unido.

Passa o problema inteiro que você está tentanto resolver que fica mais fácil de entender.

Até mais!

M

Olá!

Estou tentando unir a propriedade categoria.
Usando o exemplo que vc passou de pessoa, ao invés de comparar se o nome é igual, eu comparo o desconto e o agravo, se forem iguais, eu junto as categorias de cada objeto comparado.

[]s
Eliane

M

Olá!

Consegui resolver o problema…

Obrigada!!!

Criado 17 de setembro de 2006
Ultima resposta 18 de set. de 2006
Respostas 3
Participantes 2