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