[Java] Metodo per ordinare elementi in un ArrayList

Gol_D_Roger
Salve, devo scrivere un metodo che ordina gli elementi di una lista in base al colore(è un esercizio che ho inventato), ma sto avendo qualche problema.

questo è il mio metodo:

public List<Collare> ordinaLista(){
		List<Collare> lista = new ArrayList<Collare>();
		lista.addAll(this.list);
		Collections.sort(lista);
		return lista;
	}


Praticamente ho definito una classe Cane, in cui ho scritto questo metodo, e al suo interno ho definito una lista di oggetti Collare

public class Cane {
	private String nome;
	private int eta;
	private List<Collare> list;
	
	public Cane(String nome, int eta){
		this.nome = nome;
		this.eta = eta;
		this.list = new ArrayList<Collare>();
	}


Inlotre la classe Collare implementa l'interfaccia Comparable

public class Collare implements Comparable<Collare>


e al suo interno ho definito il metodo compaTo

@Override
	public int compareTo(Collare o) {
		return this.colore.compareTo(o.colore);
	}


Il mio problema è che il metodo
public List<Collare> ordinaLista()
non funziona, infatti se faccio un test:

@Test
	public void test_OrdinaLista() {
		Cane cane = new Cane("Bobby",1);
		List<Collare> lista = new ArrayList<Collare>();
		Collare c3 = new Collare("Arancione",2);
		Collare c2 = new Collare("Bourdeaux",5);
		Collare c1 = new Collare("Celeste",1);
		lista.add(c1);
		lista.add(c3);
		lista.add(c2);
		cane.ordinaLista();
		assertEquals("Arancione",lista.get(0).getColore());
		assertEquals("Bourdeaux",lista.get(1).getColore());
		assertEquals("Celeste",lista.get(2).getColore());
	}


questo test fallisce.Potreste aiutarmi?

Grazie in anticipo.

Risposte
claudio862
Il tuo metodo crea una copia della lista, ordina la copia e restituisce la copia, lasciando l'originale intatta.
Nel tuo test tu ignori la lista restituita dal metodo ordinaLista e invece controlli che la lista originaria sia ordinata.

Gol_D_Roger
Grazie per la tua risposta.

tra i molti ho fatto anche questo tentativo:

@Test
	public void test_OrdinaLista() {
		Cane cane = new Cane("Bobby",1);
		List<Collare> lista = new ArrayList<Collare>();
		Collare c3 = new Collare("Arancione",2);
		Collare c2 = new Collare("Bourdeaux",5);
		Collare c1 = new Collare("Celeste",1);
		lista.add(c1);
		lista.add(c3);
		lista.add(c2);
		List<Collare> list = cane.ordinaLista();
		list.addAll(lista);
		assertEquals(3,list.size());
		assertEquals("Arancione",list.get(0).getColore());
		assertEquals("Bourdeaux",list.get(1).getColore());
		assertEquals("Celeste",list.get(2).getColore());
		
	}


ma il test fallisce comunque.

claudio862
       ...
      List<Collare> list = cane.ordinaLista();
      list.addAll(lista);
      ...


cane.ordinaLista() ti restituisce la lista ordinata. Poi tu inserisci ancora la lista originale. Adesso hai una lista di 6 elementi, i primi 3 sono quelli originali ordinati, gli ultimi 3 sono quelli originali nell'ordine originale.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.