Ordenar uma lista por preço

Olá pessoal

tenho o seguinte código:

[code]
package com.pcs.questoes;

import java.util.ArrayList;
import java.util.List;

import com.pcs.resposta.TiposRespostas;
import com.pcs.modelo.*;

public class TiposQuestoes {
public void exerciciosTipoSimples() {

	TiposRespostas tipos = new TiposRespostas();
	
	List<Fruta> listaFrutas = new ArrayList<Fruta>();
	Fruta l = new Laranja();
	l.setPreco("R$ 20,00");
	listaFrutas.add(l);
	Fruta p = new Pera();
	p.setPreco("R$ 10,00");
	listaFrutas.add(p);
	Fruta p2 = new Pera();
	p.setPreco("R$ 11,00");
	listaFrutas.add(p2);
	Fruta f1 = new Limao();
	f1.setPreco("R$ 5,00");
	listaFrutas.add(f1);
	Fruta f2 = new Limao();
	f2.setPreco("R$ 5,00");
	listaFrutas.add(f2);
	
	List<Fruta> listaFrutasOrdenadasPreco = tipos.ordenaListaPorPreco(listaFrutas);
	// Ordenar por tipos em ordem alfabética (Laranja, Limao, Pera) e ordenar dentro dos tipos por preço. 
	List<Fruta> listaFrutasOrdenadasPorTipoePreco = tipos.ordenaListaPorTipoEPreco(listaFrutas);
	
}

}[/code]

E onde tenho que trabalhar:

[code]package com.pcs.resposta;

public class TiposRespostas {

public String ordenaListaPorPreco(String preco)
{
	return null;
}

public String ordenaListaPorTipoEPreco()
{
	return null;
}

}[/code]

Meu primeiro método é ordenar a lista de preços, agora vem minha duvida: como ordenar uma lista de preços que está em String?
Existe alguma função para isto?

seu modelo “Fruta” vai te dar problema.
Defina o campo preco como valor numerico e depois é só utilizar os recursos …

public class ComparatorPreco implements Comparator<Fruta>{
...
Comparator comparator = new ComparatorPreco();
Collections.sort(listaFrutas , comparator);

[quote=tiozao_bp]seu modelo “Fruta” vai te dar problema.
Defina o campo preco como valor numerico e depois é só utilizar os recursos …

public class ComparatorPreco implements Comparator<Fruta>{
...

Comparator comparator = new ComparatorPreco(); Collections.sort(listaFrutas , comparator); [/quote]

Mas tem que ser em String mesmo por causa dos “R$” =/

Bom, o correto seria usar double para o campo preço, que você poderia ordenar da seguinte forma.

       Comparator&lt;Fruta&gt; comparator = new Comparator&lt;Fruta&gt;(){

        public int compare(Fruta a, Fruta b){
                return a.getPreco().compareTo(b.getPreco());
        }

}

Collections.sort(listaFrutas , comparator);

Talvez uma maneira de resolver seria essa abaixo, porém resalto que o correto seria trabalhar com tipo double no preço.

[code]
       Comparator&lt;Fruta&gt; comparator = new Comparator&lt;Fruta&gt;(){

        public int compare(Fruta a, Fruta b){
                Double precoa = Double.parseDouble(a.getPreco().replac("R$ ","").repace(",","."));
                Double precob = Double.parseDouble(b.getPreco().replac("R$ ","").repace(",","."));
                return precoa.compareTo(precob);
        }

}

Collections.sort(listaFrutas , comparator);
[/code]

[quote=Murilo_Ferreira]Bom, o correto seria usar double para o campo preço, que você poderia ordenar da seguinte forma.

       Comparator&lt;Fruta&gt; comparator = new Comparator&lt;Fruta&gt;(){

        public int compare(Fruta a, Fruta b){
                return a.getPreco().compareTo(b.getPreco());
        }

}

Collections.sort(listaFrutas , comparator);

Talvez uma maneira de resolver seria essa abaixo, porém resalto que o correto seria trabalhar com tipo double no preço.

[code]
       Comparator&lt;Fruta&gt; comparator = new Comparator&lt;Fruta&gt;(){

        public int compare(Fruta a, Fruta b){
                Double precoa = Double.parseDouble(a.getPreco().replac("R$ ","").repace(",","."));
                Double precob = Double.parseDouble(b.getPreco().replac("R$ ","").repace(",","."));
                return precoa.compareTo(precob);
        }

}

Collections.sort(listaFrutas , comparator);
[/code]

[/quote]

SIm tb acho que seria o correto, mas o treinamento quer isto rs fazer o que?
E não funcionou esse de cima… me deram a dica de Simples brute force com permutações de números, poderia dar um exemplo disto?

ok, porque não funcionou ? deu erro ? posta o código alterado aqui pra gente ver.

“brute force com permutações de números”, vai sem bem mais complicado e talvez não funcione tão perfeitamente quanto a usar comparator.

Fala galera!

“R$” vc usa apenas para exibir o valor ao usuário final. Trate internamente o valor como double como foi dito pelo tiozao_bp, e para exibir use o nossos amigos Locale e NumberFormat :wink:

Exemplo:

Locale ptBR = new Locale("pt", "BR");

NumberFormat moedaFormat = NumberFormat.getCurrencyInstance(ptBR);

System.out.println(moedaFormat.format(13.23));

Abs!

[code]
package com.pcs.resposta;
import java.util.Comparator;
import java.util.Collection;
import java.util.Collections;
import com.pcs.modelo.Fruta;

public class TiposRespostas {

Comparator<Fruta> comparator = new Comparator<Fruta>()
{
	public int compare(Fruta l, Fruta p, Fruta p2, Fruta f1, Fruta f2)
	{
		Double precol = Double.parseDouble(l.getPreco().replac("R$ ","").repace(",","."));
		Double precop = Double.parseDouble(p.getPreco().replac("R$ ","").repace(",","."));
		Double precop2 = Double.parseDouble(p2.getPreco().replac("R$ ","").repace(",","."));
		Double precof1 = Double.parseDouble(f1.getPreco().replac("R$ ","").repace(",","."));
		Double precof2 = Double.parseDouble(f2.getPreco().replac("R$ ","").repace(",","."));
		return precol.compare(p, p2, f1, f2);
		
	}
}

Collections.sort(listaFrutas, comparator);

}[/code]

Deu erro neste “Collections”, apliquei de forma certa?

“brute force”? eu acho que ele deve estar falando de algum metodo de ordenação como bubble sort. Certo?

“brute force”? eu acho que ele deve estar falando de algum metodo de ordenação como bubble sort. Certo?[/quote]

Deve ser sim.


package com.pcs.resposta;
import java.util.Comparator;
import java.util.Collection;
import java.util.Collections;
import com.pcs.modelo.Fruta;


public class TiposRespostas {

 public static void main(String[] args) {
          
        List&lt;Fruta&gt; listaFrutas = new ArrayList&lt;Fruta&gt;();  
        Fruta l = new Laranja();  
        l.setPreco("R$ 20,00");  
        listaFrutas.add(l);  
        Fruta p = new Pera();  
        p.setPreco("R$ 10,00");  
        listaFrutas.add(p);  
        Fruta p2 = new Pera();  
        p.setPreco("R$ 11,00");  
        listaFrutas.add(p2);  
        Fruta f1 = new Limao();  
        f1.setPreco("R$ 5,00");  
        listaFrutas.add(f1);  
        Fruta f2 = new Limao();  
        f2.setPreco("R$ 5,00");  
        listaFrutas.add(f2);  


	Comparator&lt;Fruta&gt; comparator = new Comparator&lt;Fruta&gt;()
	{
		public int compare(Fruta a, Fruta b)
		{
			Double precoa = Double.parseDouble(a.getPreco().replace("R$ ","").repace(",","."));
			Double precob = Double.parseDouble(b.getPreco().replace("R$ ","").repace(",","."));
			return precoa.compareTo(precob);
			
		}
	}
	
	Collections.sort(listaFrutas, comparator);
	
 }
}

Mas não pode está nessa classe, o meu método tem de fazer isto.

[code]
public List ordenaListaPorPreco(List listaFrutas) {

	return null;
}[/code]

Mas não pode está nessa classe, o meu método tem de fazer isto.

[code]
public List ordenaListaPorPreco(List listaFrutas) {

	return null;
}[/code]

[quote=jkrfabio]Mas não pode está nessa classe, o meu método tem de fazer isto.

[code]
public List ordenaListaPorPreco(List listaFrutas) {

	return null;
}[/code][/quote]

Oras bolas, então pegue a parte do código que o Murilo postou e cole dentro desse teu método.

[quote=Bruno Laturner][quote=jkrfabio]Mas não pode está nessa classe, o meu método tem de fazer isto.

[code]
public List ordenaListaPorPreco(List listaFrutas) {

	return null;
}[/code][/quote]

Oras bolas, então pegue a parte do código que o Murilo postou e cole dentro desse teu método.[/quote]

Concordo com você Bruno, pra ser programador tem que usar um pouco da inteligência e bom senso.

[quote=Bruno Laturner][quote=jkrfabio]Mas não pode está nessa classe, o meu método tem de fazer isto.

[code]
public List ordenaListaPorPreco(List listaFrutas) {

	return null;
}[/code][/quote]

Oras bolas, então pegue a parte do código que o Murilo postou e cole dentro desse teu método.[/quote]

Coisa de estagiário --’. Valeu!