[Java] Metodo per ordinare elementi in un ArrayList
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:
Praticamente ho definito una classe Cane, in cui ho scritto questo metodo, e al suo interno ho definito una lista di oggetti Collare
Inlotre la classe Collare implementa l'interfaccia Comparable
e al suo interno ho definito il metodo compaTo
Il mio problema è che il metodo
questo test fallisce.Potreste aiutarmi?
Grazie in anticipo.
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
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.
Nel tuo test tu ignori la lista restituita dal metodo ordinaLista e invece controlli che la lista originaria sia ordinata.
Grazie per la tua risposta.
tra i molti ho fatto anche questo tentativo:
ma il test fallisce comunque.
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.
... 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.