[RESOLVIDO] Forma Correta de Ordenação

Boa noite :coffee::vulcan_salute:,

Pessoal, criei uma pequena aplicação que adiciona produtos a um arquivo txt, e um método listarProdutos(Comparator c) para ordenar os produtos através de um dos seguintes critérios, ID, Descrição ou Preço utilizando o conjunto TreeSet para o mesmo, porém o TreeSet remove elementos repetidos, aí fiz uma pequena modificação para não remover, mas queria saber se a melhor maneira de ordenar são através dos conjuntos ou existe outra maneira mais eficiente?

Segue o código de como está agora, se os preços forem iguais irá comparar o id e retornar um número maior, lembrando que está funcionando como eu gostaria;

public class PrecoComparator implements Comparator<Produto> {
	public int compare(Produto o1, Produto o2) {
		if (o1.getPreco() == o2.getPreco()) {
			if(o1.getId() > o2.getId()) {
				return 1;
			}
		}
		if (o1.getPreco() > o2.getPreco()) {
			return 1;
		}
		return -1;
	}
}

Obrigado!!!

1 curtida

Você não precisa elaborar lógicas para retornar +1, -1 ou 0.
A interface Comparator serve para retornar a diferença entre dois objetos.
Na matemática, a diferença é o resultado de uma subtração, veja:

public class PrecoComparator implements Comparator<Produto> {
    
    public int compare(Produto o1, Produto o2) {
        int diferenca = Double.compare(o1.getPreco(), o2.getPreco());
        if (diferenca == 0) {
            return o1.getId() - o2.getId();
        }
        return diferenca;
    }
}
1 curtida

Opa, achei que tinha algo místico por trás além disso! kkk

Obrigado @staroski! (Sobrenome russo?)

1 curtida

Dizem que é polonês, mas há controvérsias, acredito que os familiares trocaram o nome quando chegaram ao Brasil fujidos da guerra.
Mas tenho descendência polonesa, dinamarquesa, russa e alemã.

1 curtida