Ordenar array de objetos por atributo

9 respostas
J

Boa noite,

Gostaria de saber se é possível ordenar um array de objetos através de suas propriedades utilizando o código abaixo:
class Produto
{   // Propriedades da classe Produto
    int codIdentificador;
    String descrProduto;
    double precoCusto;
    double precoVenda;
    int qtdEstoque;

    Produto(int codIdentificador, String descrProduto, double precoCusto, double precoVenda, int qtdEstoque)
    {
        this.codIdentificador = codIdentificador;
        this.descrProduto = descrProduto;
        this.precoCusto = precoCusto;
        this.precoVenda = precoVenda;
        this.qtdEstoque = qtdEstoque;
    }

}

public class Program
{
    public static void main(String[] args)
    {
        // Cria um array de objetos 
        Produto[] produtos =
        {
            new Produto(5, "Calça", 20.0, 28.0, 200),
            new Produto(2, "Bermuda", 20.0, 28.0, 5),
            new Produto(1, "Camiseta de malha", 20.0, 28.0, 100),
            new Produto(3, "Camisa lisa", 20.0, 28.0, 30),
            new Produto(4, "Camisa de algodão", 20.0, 28.0, 50)            
        };     

       System.out.println("Lista de Produtos: ");
       System.out.println();
       // percorres os produtos
       for(Produto p : produtos)
       {
           System.out.println("Identificador: " + p.codIdentificador);
           System.out.println("Descrição: " + p.descrProduto);
           System.out.println("Custo: " + p.precoCusto);
           System.out.println("Venda: " + p.precoVenda);
           System.out.println("Estoque: " + p.qtdEstoque);
           System.out.println();
           System.out.println();
       }
    }
}

Agradeço desde já.

9 Respostas

evertonsilvagomesjav

Quer ordenar pelo que?

int codIdentificador;

String descrProduto;

double precoCusto;

double precoVenda;

int qtdEstoque
J

Pelo codIdentificador.

evertonsilvagomesjav

Troque ele para Integer então e faça o seguinte:

public class Produto implements Comparable<Produto> {

	 	Integer codIdentificador;   // Integer
	    String descrProduto;   
	    double precoCusto;   
	    double precoVenda;   
	    int qtdEstoque;   
	  
	    Produto(int codIdentificador, String descrProduto, double precoCusto, double precoVenda, int qtdEstoque)   
	    {   
	        this.codIdentificador = codIdentificador;   
	        this.descrProduto = descrProduto;   
	        this.precoCusto = precoCusto;   
	        this.precoVenda = precoVenda;   
	        this.qtdEstoque = qtdEstoque;   
	    }   
	  
	  
		@Override
		public int compareTo(Produto o) {
			// TODO Auto-generated method stub
			return this.codIdentificador.compareTo(o.codIdentificador);
		}   
    
	}
package com.enu;

import java.util.Arrays;

public class Program {

	public static void main(String[] args) {
		
		Produto[] produtos =   
        {   
            new Produto(5, "Calça", 20.0, 28.0, 200),   
            new Produto(2, "Bermuda", 20.0, 28.0, 5),   
            new Produto(1, "Camiseta de malha", 20.0, 28.0, 100),   
            new Produto(3, "Camisa lisa", 20.0, 28.0, 30),   
            new Produto(4, "Camisa de algodão", 20.0, 28.0, 50)               
        };       
  
		Arrays.sort(produtos); // ORDENAÇÃO AQUI.
		
       System.out.println("Lista de Produtos: ");   
       System.out.println();   
       // percorres os produtos   
       for(Produto p : produtos)   
       {   
           System.out.println("Identificador: " + p.codIdentificador);   
           System.out.println("Descrição: " + p.descrProduto);   
           System.out.println("Custo: " + p.precoCusto);   
           System.out.println("Venda: " + p.precoVenda);   
           System.out.println("Estoque: " + p.qtdEstoque);   
           System.out.println();   
           System.out.println();   
       }   
		
		
	}
	
}
evertonsilvagomesjav

Se nao quiser trocar para Integer da pra fazer tb:

package com.enu;

public class Produto implements Comparable<Produto> {

	 	int codIdentificador;   
	    String descrProduto;   
	    double precoCusto;   
	    double precoVenda;   
	    int qtdEstoque;   
	  
	    Produto(int codIdentificador, String descrProduto, double precoCusto, double precoVenda, int qtdEstoque)   
	    {   
	        this.codIdentificador = codIdentificador;   
	        this.descrProduto = descrProduto;   
	        this.precoCusto = precoCusto;   
	        this.precoVenda = precoVenda;   
	        this.qtdEstoque = qtdEstoque;   
	    }   
	  
	    
	    public static void main(String[] args) {
			
	    
	    }


		@Override
		public int compareTo(Produto o) {
			// TODO Auto-generated method stub
			return this.codIdentificador - o.codIdentificador;
		}   
    
	}
J

Muito obrigado Everton. Para que serve a sintaxe “@Override” em sem código? -Utilizando Integer, muda alguma coisa no processamento da aplicação, diferente de int?

Fraterno abraço.

evertonsilvagomesjav

juniomundo:
Muito obrigado Everton. Para que serve a sintaxe “@Override” em sem código? -Utilizando Integer, muda alguma coisa no processamento da aplicação, diferente de int?

Fraterno abraço.

Opa Junio, entao esse @Override, significa que vc esta forçando a sobreescrita do método compareTo da Interface Comparable.

Quanto ao uso de Integer e int, é melhor sempre que der vc utilizar o 'int", por ser primitivo e nao um objeto como Integer vai ocupar um espaço menor na sua memoria. Mas nesse seu caso nem vai ser notavel essa diferença.

nel

Só para acrescentar. O uso do annotation @Override é totalmente dispensavél, é apenas uma notação indicando que aquele método já existe em uma classe pai e/ou uma interface e está sendo sobrescrito na classe em questão.

Em relação a tipo primitivo ou Wrapper (Integer, por exemplo), creio que não há sentindo em utilizar Wrapper quando você tem uma variavél que nunca será nula, por exemplo, você tem uma classe Produto e o campo id, que é o identificador dela, neste caso, você sabe que sempre haverá um valor, portanto, não há motivo para alocar um Objeto na memória :slight_smile:

Agora, quando trata-se de valores que podem vir a se tornarem nulos, ai sim, utiliza de Wrapper.
É uma opinião.

Abraços.

J

Muito obrigado pelos esclarecimentos, foram de grande valia. Paz e saúde para vocês!

alucardeck

. putz postei errado . desculpa xD

Criado 13 de setembro de 2010
Ultima resposta 22 de mar. de 2011
Respostas 9
Participantes 4