Pessoal, estou tendo um problema com Comparator, preciso comparar valores Double, de ordem crescente, isso consigo, mas alem disso, preciso que os valores que sejam zero venham por ultimo, alguem tem ideia de como posso fazer isso??? estou tentando algo assim:
Acho que assim deve funcionar.
Espero ter ajudado;
Valeu!
vanilton.coelho
Não entendi porque o o2 recebi -1, está totalmente fora de minha lógica, estou fazendo a lógica inversa??? achei que sempre o objeto1 que era comparado primeiramente, ai sempre que ele for zero, eu seto o retorno -1, e no seu exemplo, vc coloca o -1 para o objeto 2. Qual é a ordem disso ai???
L
lavh
Se o objeto1 for “maior” que o objeto2 você precisa voltar um número maior que 0 para indicar isso.
Se eles forem “iguais” você retorna 0.
e se o objeto1 for “menor” que o objeto2 você precisa voltar um número menor que 0.
Se você quer ordenar eles em ordem crescente, e quer que os 0 sejam os últimos, você precisa colocar 1 quando ambos for 0…mas ainda sim não sei se vai dar certo…
[]'s
fantomas
Eu discordo um pouquinho desta parte.
plano a) Na minha opinião vc deve considerar todo objeto do tipo double igual a zero como MAIOR.
plano b) Antes de ordenar retire os valores zeros da lista, aplique a ordenação e adicione os valores zeros no fundo da lista novamente.
flw
Richard_Mendes_Madur
Coloquei dois “ifs” porque o zero pode vir em uma comparação tanto como primeiro parâmetro como no segundo.
Se eu deixar apenas o primeiro “if”, o metodo não comparará corretamente, por exemplo, os números -1 e 0,
B
Bruno_Laturner
Acho que não vá funcionar quando ambos forem 0 e retornar 1:
De acordo essa lógica, se tivermos dois objetos, A e B, ambos com zero,
quando compararmos A com B então A > B.
quando compararmos B com A então B > A.
A ordenação não é estável. Esse caso especial faz com que ele não seja um algoritmo de ordenação.
Richard_Mendes_Madur
Mas esse algoritmo que o alpharagga quer não orderna realmente.
É uma solução que atende apenas o problema dele.
Quando ambos os objetos a serem ordenados forem zero, não faz diferença.
vanilton.coelho
Valeu ai a todos, principalmente Richard e lavh, era erro de lógica, não por eu estar fazendo a lógica errada e sim porque eu estava pontuando incorretamente. conforme vcs me mostraram e entendi agora, nesse caso de crescente, ele vai lá para o final no caso o maior, que no caso retorna geralmente 1, entao, se eu quero que o zero vá lá pro final, eu retorno 1 quando o objeto comparado em questão for 0, digo, o atributo dele. obrigado a todos mesmo, já estava querendo usar a marreta. usar uma lista auxiliar para separar os valores zero, mas não foi preciso, obviamente.