PDA

View Full Version : [JAVA] merge di due arraylist particolare


miao84
31-05-2011, 12:24
Ho creato un "ciclo" che dati due arraylist controlla i primi tre elementi dell'array, degli arraylist iterati, e se questi sono uguali un terzo arraylist prende il risultato del secondo, altrimenti il risultato del primo. Naturalmente il primo arraylist è popolato con dimensione >= al secondo. In parole povere...


final List<List<?>> risultati1 = new ArrayList<List<?>>();
final List<List<?>> risultati2 = new ArrayList<List<?>>();
final List<List<?>> risultati_totali = new ArrayList<List<?>>();

.........


int i = 0;
int j = 0;

if (!risultati2.isEmpty()){

while (i<risultati1.size()){
while(j<risultati2.size()){

if (risultati1.get(i).get(0).equals(risultati2.get(j).get(0))&&risultati1.get(i).get(1).equals(risultati2.get(j).get(1))&&risultati1.get(i).get(2).equals(risultati2.get(j).get(2))){
//se i primi tre elementi sono uguali prendo risultati2
risultati_totali.add(risultati2.get(j));
i+=1;
j+=1;
}else{
//se no inserisco i risultati1 (risultati1 e risultati2 sono popolati in maniera ordinata rispetto ai 3 elementi controllati)
risultati_totali.add(risultati1.get(i));
i+=1;
}
}
//non ci sono piu elementi in risultati2
risultati_totali.add(risultati1.get(i));
i=i+1;
}
metodo(risultati_totali);

}else if (risultati2.isEmpty()){
//risultati2 è vuoto
metodo(risultati1);
}






Mi è stato chiesto di rifarlo in maniera "object oriented" (credo utilizzando meglio generics, mappe e quant'altro)...qualche suggerimento??

PGI-Bis
31-05-2011, 14:39
Bisognerebbe vedere il testo dell'esercizio e il codice completo perché l'orientamento agli oggetti non è quantità o una qualità ma un punto di vista: in senso OO il tuo codice ha un certo significato. E' poi possibile che questo significato corrisponda o non corrisponda a quello che avrebbe dovuto avere.

L'unico intoppo che vedo è che il codice incollato include una precondizione implicita (che le liste di valori negli arraylist abbiano almeno tre elementi). Se questa precondizione non è controllata da qualche altra parte allora il programma è soggetto al verificarsi di un'eccezione (IndexOutOfBoundsException).

miao84
31-05-2011, 14:58
il codice va bene, non andrà mai in eccezione poichè risultati1 sarà sempre popolato da almeno un elemento contenente 5 valori (contiene risultati di una query che "deve" restituire risultati di default :D). Al massimo aggiungo un controllo !isEmpty() e se sono vuoti entrambi gli arraylist viene segnalato. E' risultati2 che contiene valori "calcolati" dal db e quindi se presenti devono avere la priorità su quelli di default. Diciamo che la mia soluzione è molto "algoritmica", magari ci sono strutture dati e metodi di classe che "aiutano" ad effettuare il controllo e rendono il codice "meno standard"