Collection.sort

2 respostas
M

Galera sou iniciante em java, fiz um código que le um arquivo que é uma lista telefonica.txt onde somei os valores em reais de acordo com cada telefone, mas agora tenho ordenar o valores e não consigo já tenttei diversas formas

public class Main

{

public static void main(String[] args) throws FileNotFoundException, IOException

{

Hashtable <String,Double> tabela = new Hashtable<String, Double>();

File file = new File(C:\temp\Ligacoes_Julho.txt);

FileReader reader = new FileReader(file);

BufferedReader buffer = new BufferedReader(reader);

String linha = null;

while(buffer.ready())

{

linha = buffer.readLine();

<a href="//System.out.println">//System.out.println</a>(linha);//imprime o arquivo

String[] stringPalavras = linha.split(" ");

String countfone;

String countvalorlig;

for(int intSeq = 0; intSeq < stringPalavras.length; intSeq++)

{

// System.out.println(stringPalavras[intSeq]);//imprime com colunas quebradas
countvalorlig = stringPalavras[stringPalavras.length -1];//imprime valor da ligação
            
            countfone = stringPalavras[intSeq];

            if(countfone.length() == 10 && StringUtils.isNumeric(countfone))
            {

                countvalorlig = countvalorlig.replace(',','.');
                if(tabela.containsKey(countfone))
                {
                    tabela.put(countfone, tabela.get(countfone) + Double.parseDouble(countvalorlig));
                }
                else
                {
                    tabela.put(countfone, Double.parseDouble(countvalorlig));
                }
            }
            //if(countfone[intSeq])
        }
   
    Set < Map.Entry < String, Double >> lista = tabela.entrySet();
    for(Map.Entry<String, Double> entry : lista)
    {
        System.out.println(entry.getKey()+ " " + String.format("%.2f",entry.getValue()));
    }

}
}

}

2 Respostas

ViniGodoy

http://www.guj.com.br/posts/list/50115.java

gomesrod

Maps não são simples de ordenar, por isso gostaria de sugerir uma abordagem diferente que além de resolver o problema deixará seu código mais limpo e bonito.

  1. Crie uma classe para armazenar telefone e valor.
    Por exemplo: class TarifaLigacao { String telefone; double valor; }

  2. Monte uma lista contendo as instâncias desse cara, um para cada telefone. Essa lista de objetos é que vai substituir o Map.

Isso foi a sugestão para reorganizar o código. Agora prosseguindo com o seu problema:

  1. Implemente a interface Comparable, e no método compareTo() será definida a regra de ordenação.

  2. Chame Collections.sort() na lista para ordená-la.

Criado 13 de setembro de 2010
Ultima resposta 13 de set. de 2010
Respostas 2
Participantes 3