Comparison with compareTo and Sort

1

Good afternoon, I'm starting in Java and I'm having a problem. I want to sort my list alphabetically. I created a class Pessoa and another class TestaPessoa .

Person

public class Pessoa implements Comparable<Pessoa> {
    private String nome;
    private int idade;
    private char sexo;

    public Pessoa(String nome,int idade, char sexo) {
        this.nome = nome;
        this.idade = idade;
        this.sexo = sexo;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public char getSexo() {
        return sexo;
    }

    public void setSexo(char sexo) {
        this.sexo = sexo;
    }


    public int compareTo(Pessoa comparar) {
        int nomeComparar = this.getNome().compareTo(comparar.getNome());
        if(nomeComparar > 0)
            return -1;
        else if (nomeComparar < 0)
            return 1;
        else return 0;
    }

}

TestaPessoa

import java.util.*;


public class TestaPessoa {

    public static void main(String[] args) {

        Pessoa pessoa1 = new Pessoa("João Fernandes Ferreia", 46, 'M');
        Pessoa pessoa2 = new Pessoa("Fernanda Rodrigues Ferreia", 23, 'F');
        Pessoa pessoa3 = new Pessoa("Lionice Rodrigues Fernandes", 43, 'F');


        List<Pessoa> lista = new ArrayList<Pessoa>();

        lista.add(pessoa1);
        lista.add(pessoa2);
        lista.add(pessoa3);

        Collections.sort(lista);

        for(int i = 0; i < lista.size(); i++) {   
            System.out.print(lista.get(i) + "\n");
        } 

    }
}

And my return is:

Pessoa@17d10166
Pessoa@1b9e1916
Pessoa@ba8a1dc
    
asked by anonymous 06.07.2015 / 21:08

1 answer

3

Change this:

System.out.print(lista.get(i) + "\n");

So:

System.out.print(lista.get(i).getNome() + "\n");

And set up your compareTo() method, where you changed < with > . It will look like this:

    public int compareTo(Pessoa comparar) {
        int nomeComparar = this.getNome().compareTo(comparar.getNome());
        if(nomeComparar < 0)
            return -1;
        else if (nomeComparar > 0)
            return 1;
        else return 0;
    }

Or if you prefer, you can simplify it further:

    public int compareTo(Pessoa comparar) {
        return this.getNome().compareTo(comparar.getNome());
    }

And finally, you can still simplify your loop avoiding having to manage counters. So, instead:

    for(int i = 0; i < lista.size(); i++) {   
        System.out.print(lista.get(i).getNome() + "\n");
    } 

Use this:

    for (Pessoa p : lista) {   
        System.out.println(p.getNome());
    } 
    
06.07.2015 / 21:17