|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2005
Messaggi: 377
|
[JAVA] Ordinare mappa mediante comparator scelto da me
Salve, vorrei realizzare una mappa di denari ordinata secondo un mio criterio, cioè dalla moneta con valore + grande a quella con valore più piccolo. Pensavo di usare
dove c'è il metodo di aggiungi, dopo aver fatto lista.put(d); Collections.sort(lista, cmp); inoltre la classe cmp class cmp implements Comparator{ public int compare(Object o1, Object o2){ Denaro d1=(Denaro) o1; Denaro d2=(Denaro) o2; if((d2.getValore() - d1.getValore()) < 0) return -1; if((d2.getValore() - d1.getValore()) == 0) return 0; return 1; } } solo che non funziona xkè risulta che tale metodo non è presente in Collections |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
In attesa di qualcuno che ci capisce veramente, io ti dico che a me non piace il
"Collections.sort(lista, cmp);" io di solito uso una cosa del tipo: "Collections.sort(lista, new cmp());", dove cmp è una classe con il proprio CompareTo. Prendi tutto con le pinze, e con i guanti...
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
Codice:
Collections.sort(List, Class); Codice:
Collections.sort(List, Comparator); Comunque, non so se sono io "quello che ci capisce"...
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Feb 2005
Messaggi: 377
|
come dovrei scrivere per creare un metodo comparator?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Mantenendo il codice che hai scritto:
Collections.sort(lista, new cmp()); |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Mar 2003
Messaggi: 3852
|
Quote:
Collections.sort(lista, new cmp()); così a occhio non ci sono altre modifiche da fare, fai una prova..
__________________
Cerco fotocamera con buono zoom!! CLICCA! ° Moderatore del Forum Ufficiale di ElaborarE (responsabile sezione HI-FI e Car Audio) ° |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2005
Messaggi: 377
|
ma io l'ho fatto, ma mi da quest'errore:
D:\poo\app260706\SoldiMap.java:29: cannot find symbol symbol : method sort(java.util.Map<java.lang.Double,poo.app260706.Denaro>,poo.app260706.SoldiMap.cmp) location: class java.util.Collections Collections.sort(lista, new cmp()); ^ |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se "lista" è una lista (List, figli & nipoti) è un paio di maniche.
Se "lista" è una mappa (Map, figli & nipoti) è un'altro paio di maniche (anzi parliamo proprio di un'altra camicia). Il compilatore, che è un chiacchierone, ci dice che "lista" è una mappa. Le chiavi sono Double e i valori sono Denari. Se nell'elemento E(K, V) della mappa la chiave K è il valore della moneta V puoi ottenere il risultato che cerchi usando la classe cmp che hai creato (cioè un comparator) e, anzichè Collections.sort, dire: Codice:
Comparator<Double> cmp = new Comparator<Double>() {
public int compareTo(Double a, Double b) {
//eccetera
}
};
Map<Double, Denaro> sortedMap = new TreeMap<Double, Denaro>(cmp);
sortedMap.putAll(lista);
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2005
Messaggi: 897
|
Per ordinare le mappe con il comparator, conviene farsi restituire il keyset e poi richiamare il collections.sort(keyset, new comparator())
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Però il risultato non è una mappa ordinata.
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Non puoi usare TreeMap?
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Io mi sono perso. Ordiniamo una mappa, scorriamo in modo ordinato il contenuto di una mappa, creiamo una mappa ordinata o mappiamo una lista?
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Feb 2005
Messaggi: 377
|
una precisazione: la mappa deve essere ordinata dal denaro più grande a quello + piccolo. Si poteva anche usare una treemap, vero, ma entrambe usano l'ordine naturale. La domanda è, come cavolo faccio a inserire nell'ordine che voglio io?
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
|
Quote:
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer °SetiEmperor°| Ninja Technologies { qualunque cosa sia, è veloce e fa male (cit.) } |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:00.



















