Como ordenar um Arraylist?

9 respostas
Rulldra

Oi pessoal! Estou com uma dúvida e é meio urgente... pra um trabalho que preciso entregar amanhã!! =//
Preciso ordenar meu arraylist pra depois imprimir todo o seu conteúdo (Nome do produto, quantidade do produto e preço do produto). Mas não sei como ordená-lo... já tentei usar sort, mas acho que na linha a qual usei, meu código está errado. Meu arraylist é o seguinte:

ArrayList <Produto> loja = new ArrayList<Produto>();
Criei uma classe Produto assim:
public class Produto {
	private String nome;
	private int quantidade;
	private int preco;
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public int getPreco() {
		return preco;
	}
	
	public void setPreco(int preco) {
		this.preco = preco;
	}
	
	public int getQuantidade() {
		return quantidade;
	}
	
	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}
}

Aí eu pego os nomes dos produtos do meu array loja e ordeno em ordem alfabética. Depois imprimo. A parte de imprimir eu consigo, mas o problema maior é essa ordenação aí :(
Como fazer? Me ajudem, por favor. Preciso que me digam o código, a única linha que preciso escrever ali pra ordenar ...
Agradeço desde já!

9 Respostas

F

é so usar o metodo sort da Classe Collection.

[]'s

jgbt

se vc quer ordenar por Produto precisa dizer como o java deve fazer isso.
uma maneira é implementar a interface Compareble e sobrescrever o metodo compareTo. la vc diz quais atributod vc quer que sejam levados em consideração n hora de comparar seus objetos.
Se vc der uma pesquisada no forum vai achar varios exemplos de como fazer isso.
ou de uma olhada aqui

[]'s

O

Oi Rulldra, basta usar o método sort da Classe Collection. Mas para isso você vai ter que implementar o método compareTo. Ficaria assim no caso de ordenar pelo preço:

public class Produto implements Comparable{

// …

// …	

public int compareTo(Produto produto) {

if(this.preco < produto.preco) {

return -1;

}

if(this.preco > produto.preco) {

return 1;

}

return 0;

}

}

Você pode definir também a ordem de classificação somente trocando de lugar o “-1” e o “1”.

Depois é só chamar o método antes de imprimir:
Collections.sort(loja);

Jair_Rillo_Junior

Só aproveitando o tópico.
Se você tem dúviadas sobre Collection, aconselho você estudar todas elas antes de sair usando. Muitas vezes, você pode estar “escolhendo” a Collection errada para determinado requisito.

Vai ai apenas uma dica :wink:

Rulldra

Odilair, o problema é imprimir em ordem de Nomes!
Como eu faço?!! Eu preciso entregar esse trabalho hoje e só falta isso!! Me ajudem, por favooor!! :frowning:

Jair_Rillo_Junior

Ué, faz a mesma coisa que o Odilair fez, porém com o atributo nome :?

Rulldra

Como?!!

“this.nome < produto.nome” ??

Acredite se quiser, já fiz isso… mas dá erro, pq não dá pra comparar strings assim… e outra coisa: essa parte do código eu coloco na classe Produto ou na visual class Loja? (Se for na Produto, então o que eu coloco na Loja? E se for na Loja, o que eu coloco na Produto?)
:frowning:

cv1

Leia a documentacao do JavaDoc sobre a interface Comparable e o metodo compareTo :wink:

O

No caso de Strings fica só um pouquinho diferente:

public class Produto implements Comparable{

// …

// …

public int compareTo(Produto produto) {

if(this.nome.compareTo(produto.nome) < 0) {

return -1 ;

}

if(this.nome.compareTo(produto.nome) > 0) {

return 1;

}

return 0;

}

}

Pronto, e basta colocar esse código na classe Produto como exemplificado antes.

Criado 28 de novembro de 2006
Ultima resposta 29 de nov. de 2006
Respostas 9
Participantes 6