PDA

View Full Version : [JAVA] Vari ordinamenti all'interno di una lista


franksisca
06-11-2013, 09:52
allora io ho una lista unica che contiene tre tipologie di oggetti


- {obj1.tipo1}
- {obj2.tipo1}
- {obj3.tipo2}
- {obj4.tipo2}
- {obj5.tipo1}
- {obj6.tipo1}



io ora devo fare un doppio ordinamento su queste liste interne.

al momento ho pensato, mi spezzo la lista in x liste (in questo caso in due liste), una per tipologia, le ordino singolarmente, e poi le riunisco.

e fino a qui niente di complicato.

il problema sorge nell'ordinamento, perchè non devo ordinarle in modo classico, ma devo ordinarle in base ad un file esterno che mi dà il volume di vendita.
inoltre il volume di vendita non è su tutti i prodotti, ma su un campione di essi.

ad esempio, la mia lista è:

{nome, prezzo, categoria}


- {tachipirina, 5.00, A}
- {moment, 2.00, A}
- {paracetamolo,15.00, B }
- {aspirina, 3.00, B }
- {sinflex, 4.00, C}
- {moment molly, 5.00, C}


mentre questi sono i volumi di vendita

{nome, posizione}

- {moment, 1}
- {tachipirina, 2}
- {paracetamolo,3}
- {moment molly,4}


quindi la lista finale sarà:
ad esempio, la mia lista è:

- {moment, 2.00, A}
- {tachipirina, 5.00, A}
- {paracetamolo,15.00, B }
- {aspirina, 3.00, B }
- {moment molly, 5.00, C}
- {sinflex, 4.00, C}


chi mi dà qualche input sull'implementazione (basta anche una spiegazione spicciola) perchè non riesco a ragionarci proprio stamattina -.-

wingman87
06-11-2013, 10:38
Secondo me conviene usare una sola lista e su di essa applicare due ordinamenti. Usando il tuo esempio, la lista iniziale è:
{nome, prezzo, categoria}
- {tachipirina, 5.00, A}
- {moment, 2.00, A}
- {paracetamolo,15.00, B }
- {aspirina, 3.00, B }
- {sinflex, 4.00, C}
- {moment molly, 5.00, C}

inoltre con il file dei volumi di vendita ti crei una mappa nome -> posizione

A questo punto il primo ordinamento che applichi è sul lookup nome -> posizione, dove se il lookup esiste usi quel valore, altrimenti Integer.MAX_VALUE (oppure metti prima quello che possiede un lookup e se entrambi non hanno un lookup il primo viene prima del secondo, cioè non ne cambi l'ordine).

Esempio dopo il primo ordinamento:
- {moment, 2.00, A}
- {tachipirina, 5.00, A}
- {paracetamolo,15.00, B }
- {moment molly, 5.00, C}
- {aspirina, 3.00, B }
- {sinflex, 4.00, C}

Il secondo ordinamento è sulla categoria.

Esempio dopo il secondo ordinamento:
- {moment, 2.00, A}
- {tachipirina, 5.00, A}
- {paracetamolo,15.00, B }
- {aspirina, 3.00, B }
- {moment molly, 5.00, C}
- {sinflex, 4.00, C}

Ovviamento almeno il secondo ordinamento dev'essere stabile

franksisca
06-11-2013, 11:16
Secondo me conviene usare una sola lista e su di essa applicare due ordinamenti. Usando il tuo esempio, la lista iniziale è:
{nome, prezzo, categoria}
- {tachipirina, 5.00, A}
- {moment, 2.00, A}
- {paracetamolo,15.00, B }
- {aspirina, 3.00, B }
- {sinflex, 4.00, C}
- {moment molly, 5.00, C}

inoltre con il file dei volumi di vendita ti crei una mappa nome -> posizione

A questo punto il primo ordinamento che applichi è sul lookup nome -> posizione, dove se il lookup esiste usi quel valore, altrimenti Integer.MAX_VALUE (oppure metti prima quello che possiede un lookup e se entrambi non hanno un lookup il primo viene prima del secondo, cioè non ne cambi l'ordine).

Esempio dopo il primo ordinamento:
- {moment, 2.00, A}
- {tachipirina, 5.00, A}
- {paracetamolo,15.00, B }
- {moment molly, 5.00, C}
- {aspirina, 3.00, B }
- {sinflex, 4.00, C}

Il secondo ordinamento è sulla categoria.

Esempio dopo il secondo ordinamento:
- {moment, 2.00, A}
- {tachipirina, 5.00, A}
- {paracetamolo,15.00, B }
- {aspirina, 3.00, B }
- {moment molly, 5.00, C}
- {sinflex, 4.00, C}

Ovviamento almeno il secondo ordinamento dev'essere stabile

ok, e se devo ordinare anche su prezzo prima che sulla categoria, applico un ulteriore livello, giusto?

wingman87
06-11-2013, 11:33
Sì, in pratica applichi tutti gli ordinamenti dal più specifico al più generale, quindi se ho capito bene:
prezzo -> volumi di vendita -> categoria

franksisca
06-11-2013, 13:17
Sì, in pratica applichi tutti gli ordinamenti dal più specifico al più generale, quindi se ho capito bene:
prezzo -> volumi di vendita -> categoria

ok, proverò, perchè mi manca qualche passaggio che forse non ho spiegato io, comunque grazie per l'aiuto