Olá, Benedito. Tudo bem?
Sobre a sua dúvida, a interface Comparable
permite que você implemente o método compareTo()
, mas apenas uma vez por classe. Isso significa que você não pode ter múltiplas implementações de compareTo()
diretamente na mesma classe para diferentes atributos.
Porém, você pode resolver isso usando a interface Comparator
, que é mais flexível para esse tipo de situação. Você pode criar diferentes classes que implementem Comparator
para cada atributo que você deseja ordenar. Aqui está um exemplo de como você pode fazer isso:
import java.util.Comparator;
public class Produto {
private String nome;
private double preco;
private String marca;
private String modelo;
// Construtores, getters e setters
// Comparador por nome
public static class ComparadorPorNome implements Comparator<Produto> {
@Override
public int compare(Produto p1, Produto p2) {
return p1.getNome().compareTo(p2.getNome());
}
}
// Comparador por preço
public static class ComparadorPorPreco implements Comparator<Produto> {
@Override
public int compare(Produto p1, Produto p2) {
return Double.compare(p1.getPreco(), p2.getPreco());
}
}
// Comparador por marca
public static class ComparadorPorMarca implements Comparator<Produto> {
@Override
public int compare(Produto p1, Produto p2) {
return p1.getMarca().compareTo(p2.getMarca());
}
}
// Comparador por modelo
public static class ComparadorPorModelo implements Comparator<Produto> {
@Override
public int compare(Produto p1, Produto p2) {
return p1.getModelo().compareTo(p2.getModelo());
}
}
}
Com essa abordagem, você pode perguntar ao usuário por qual atributo ele deseja ordenar e, em seguida, usar o Collections.sort()
com o comparador apropriado. Por exemplo:
Collections.sort(listaDeProdutos, new Produto.ComparadorPorNome());
Dessa forma, você pode ter múltiplas maneiras de ordenar sua lista, dependendo da escolha do usuário.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!