Criação de listas a partir de outra lista

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:

[code]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;
}[/code]

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!!!

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!

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

Olá!

Consegui resolver o problema…

Obrigada!!!