PDA

View Full Version : [Java] Ordinare una ArrayList di oggetti


Enrik08
14-01-2011, 17:14
Salve forum, questo è un mio programma che crea una ArrayList con dentro deglio oggetti studente che contiene nome, cognome e matricola.

MAIN:
import java.util.*;

public class Main
{
public static void main(String[] args)
{
ArrayList<Studente> lista = new ArrayList<Studente>();
lista.add(new Studente("Matteo","Donato",111));
lista.add(new Studente("Federica","Bianchi",222));
lista.add(new Studente("Alberto","Rossi",333));
for (int i=0; i<lista.size(); i++)
{
Studente s = lista.get(i);
String std = s.getAll();
System.out.println(std);
}
System.out.print("\nORDINATO PER NOME\n");
Collections.sort(lista);
for (int i=0; i<lista.size(); i++)
{
Studente s = lista.get(i);
String std = s.getAll();
System.out.println(std);
}
}

}

CLASSE:
public class Studente implements Comparable<Studente>
{
private String name;
private String surname;
private int matricola;
public void Studente()
{
name = "";
surname = "";
matricola = 0;
}
public Studente(String n, String s, int m)
{
name = n;
surname = s;
matricola = m;
}
public String getName(){return name;}
public String getSurname(){return surname;}
public int matricola(){return matricola;}
public String getAll(){String s = name + " | "+surname+" | "+matricola;
return s;}

public int compareTo(Studente otherObject)
{
return name.compareTo(otherObject.getName());
}
}

Ora il programma ora crea l'ArrayList, lo riempe e lo ordina in base al nome, ma se successivamente lo voglio ordinare per cognome o matricola come posso fare?

Ringrazio in anticipo :)

Don[ITA]
14-01-2011, 17:19
Basta che modifichi il compareTo della classe Studente:

public int compareTo(Studente otherObject) {
return surname.compareTo(otherObject.getSurname());
}

Vale anche per la matricola, con qualche accorgimento :)

Ciao

Enrik08
14-01-2011, 17:21
Ma in che modo?

Cioè come faccio in modo che il programma capisca quale compare utilizzare?

banryu79
14-01-2011, 18:02
Ora il programma ora crea l'ArrayList, lo riempe e lo ordina in base al nome, ma se successivamente lo voglio ordinare per cognome o matricola come posso fare?

Implementi un Comparator per il cognome e/o uno per la matricola (vedi l'interfaccia java.util.Comparator).

Quando usi il metodo Collection.sort passando solo la collezione di oggetti Srudente, verrà usato il metodo compareTo implemetato da Studente (in quanto Comparable), quando invece vuoi usare uno degli altri criteri passi, assieme alla collezione di oggetti Studente, un'istanza del Comparator pertinente: verrà così usata l'implementazione di compareTo di quel Comparator.