Gostaria de saber se é possível ordenar um array de objetos através de suas propriedades utilizando o código abaixo:
classProduto{// Propriedades da classe ProdutointcodIdentificador;StringdescrProduto;doubleprecoCusto;doubleprecoVenda;intqtdEstoque;Produto(intcodIdentificador,StringdescrProduto,doubleprecoCusto,doubleprecoVenda,intqtdEstoque){this.codIdentificador=codIdentificador;this.descrProduto=descrProduto;this.precoCusto=precoCusto;this.precoVenda=precoVenda;this.qtdEstoque=qtdEstoque;}}publicclassProgram{publicstaticvoidmain(String[]args){// Cria um array de objetos Produto[]produtos={newProduto(5,"Calça",20.0,28.0,200),newProduto(2,"Bermuda",20.0,28.0,5),newProduto(1,"Camiseta de malha",20.0,28.0,100),newProduto(3,"Camisa lisa",20.0,28.0,30),newProduto(4,"Camisa de algodão",20.0,28.0,50)};System.out.println("Lista de Produtos: ");System.out.println();// percorres os produtosfor(Produtop: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();}}}
publicclassProdutoimplementsComparable<Produto>{IntegercodIdentificador;// IntegerStringdescrProduto;doubleprecoCusto;doubleprecoVenda;intqtdEstoque;Produto(intcodIdentificador,StringdescrProduto,doubleprecoCusto,doubleprecoVenda,intqtdEstoque){this.codIdentificador=codIdentificador;this.descrProduto=descrProduto;this.precoCusto=precoCusto;this.precoVenda=precoVenda;this.qtdEstoque=qtdEstoque;}@OverridepublicintcompareTo(Produtoo){// TODO Auto-generated method stubreturnthis.codIdentificador.compareTo(o.codIdentificador);}}
packagecom.enu;importjava.util.Arrays;publicclassProgram{publicstaticvoidmain(String[]args){Produto[]produtos={newProduto(5,"Calça",20.0,28.0,200),newProduto(2,"Bermuda",20.0,28.0,5),newProduto(1,"Camiseta de malha",20.0,28.0,100),newProduto(3,"Camisa lisa",20.0,28.0,30),newProduto(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(Produtop: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:
packagecom.enu;publicclassProdutoimplementsComparable<Produto>{intcodIdentificador;StringdescrProduto;doubleprecoCusto;doubleprecoVenda;intqtdEstoque;Produto(intcodIdentificador,StringdescrProduto,doubleprecoCusto,doubleprecoVenda,intqtdEstoque){this.codIdentificador=codIdentificador;this.descrProduto=descrProduto;this.precoCusto=precoCusto;this.precoVenda=precoVenda;this.qtdEstoque=qtdEstoque;}publicstaticvoidmain(String[]args){}@OverridepublicintcompareTo(Produtoo){// TODO Auto-generated method stubreturnthis.codIdentificador-o.codIdentificador;}}
J
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.
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
Agora, quando trata-se de valores que podem vir a se tornarem nulos, ai sim, utiliza de Wrapper.
É uma opinião.
Abraços.
J
juniomundo
Muito obrigado pelos esclarecimentos, foram de grande valia. Paz e saúde para vocês!