[Java] Metodo per ordinare elementi in un ArrayList

Messaggioda flavio<Integer> » 12/05/2017, 13:14

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:

Codice:
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

Codice:
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

Codice:
public class Collare implements Comparable<Collare>


e al suo interno ho definito il metodo compaTo

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


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

Codice:
@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.
flavio<Integer>
Junior Member
Junior Member
 
Messaggio: 76 di 168
Iscritto il: 22/04/2016, 10:49

Re: [Java] Metodo per ordinare elementi in un ArrayList

Messaggioda claudio86 » 13/05/2017, 16:25

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.
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 469 di 1130
Iscritto il: 09/01/2011, 15:12

Re: [Java] Metodo per ordinare elementi in un ArrayList

Messaggioda flavio<Integer> » 14/05/2017, 09:59

Grazie per la tua risposta.

tra i molti ho fatto anche questo tentativo:

Codice:
@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.
Ultima modifica di flavio<Integer> il 15/05/2017, 08:08, modificato 1 volta in totale.
flavio<Integer>
Junior Member
Junior Member
 
Messaggio: 77 di 168
Iscritto il: 22/04/2016, 10:49

Re: [Java] Metodo per ordinare elementi in un ArrayList

Messaggioda claudio86 » 14/05/2017, 21:29

Codice:
       ...
      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.
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 470 di 1130
Iscritto il: 09/01/2011, 15:12


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron