Ciao a tutti.
Avrei bisogno di oridianare una collezione chiave-valore (elemento_univoco,priorità) per valore.
Ordinare per chiave non è un problema, ma per valore non so proprio come fare.
Potete aiutarmi?
Grazie!!!!
Gianfranco.
Ciao a tutti.
Avrei bisogno di oridianare una collezione chiave-valore (elemento_univoco,priorità) per valore.
Ordinare per chiave non è un problema, ma per valore non so proprio come fare.
Potete aiutarmi?
Grazie!!!!
Gianfranco.
Purtroppo non hai spiegato in modo chiaro. Quale collezione hai? Devi descrivere chiaramente che tipo di collezione hai, se un List (ArrayList/LinkedList ecc...) o un Map o altro. E devi anche dire che tipo di dati contiene la collezione.Originariamente inviato da fonta.re
Avrei bisogno di oridianare una collezione chiave-valore (elemento_univoco,priorità) per valore.
Ordinare per chiave non è un problema, ma per valore non so proprio come fare.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
La collezione me la posso creare a piacimento. Nel senso che posso usare la struttura che più mi facilita il lavoro. Tenete solo presente che compilo in 1.5. L'unico vincolo è che abbia in chiave una Stringa e come valore un Integer (che è il campo su cui voglio fare l'ordinamento).Originariamente inviato da andbin
Purtroppo non hai spiegato in modo chiaro. Quale collezione hai? Devi descrivere chiaramente che tipo di collezione hai, se un List (ArrayList/LinkedList ecc...) o un Map o altro. E devi anche dire che tipo di dati contiene la collezione.
Beh, ma hai già scelto? Mica posso suggerirtela io se non so esattamente cosa devi fare di preciso!Originariamente inviato da fonta.re
La collezione me la posso creare a piacimento.
Meglio ... puoi sfruttare i "generics" e altre feature di Java 5.Originariamente inviato da fonta.re
Tenete solo presente che compilo in 1.5.
Beh, ma allora non può che essere una "Map", cioè una associazione chiave->valore ... quale implementazione "concreta" dipende .....Originariamente inviato da fonta.re
L'unico vincolo è che abbia in chiave una Stringa e come valore un Integer
No, ordinare una map per valore non è fattibile .... non con quelle fornite nel framework.Originariamente inviato da fonta.re
(che è il campo su cui voglio fare l'ordinamento).
C'è una implementazione concreta che si chiama TreeMap, che è una collezione "sorted" ovvero è mantenuta ordinata internamente ma ... secondo le chiavi non i valori!
Quello che puoi fare eventualmente è questo. Hai una map con dei dati dentro. Ricavi una lista delle chiavi e questa lista (non la map!!!) la ordini usando un algoritmo di comparazione che compara i due valori presi dalla map con le due chiavi.
A quel punto, con la lista, puoi scansionare la map chiave per chiave ottenendo i valori in "ordine".
Ma come ripeto, non so cosa devi farci di preciso. L'unica cosa che posso capire è che non hai molta dimestichezza con le collezioni di Java e non ti è chiaro quali tipi di collezioni ci sono, quali implementazioni "concrete", quali sono "ordered" e quali "sorted" ecc...
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Ho dei dati presi da db su 2 ResultSet. Al momento li metto su un Hashtable (nonme ne faccio niente di una struttura ordinata perchè ordinerebbe per chiave e sarebbe inutile) ma avevo appunto il problema di ordinarli per valore.
I dati sono delle tuple con 2 valori (funzione, priorità). Li devo unire e ordinare per priorità.
Meglio di così non so spiegarmi.
Fatico a seguire la tua idea. Passi le chiavi sulla lista e poi che confronto fai per ordinarla? Magari, se riesci, esemplifica.Quello che puoi fare eventualmente è questo. Hai una map con dei dati dentro. Ricavi una lista delle chiavi e questa lista (non la map!!!) la ordini usando un algoritmo di comparazione che compara i due valori presi dalla map con le due chiavi.
A quel punto, con la lista, puoi scansionare la map chiave per chiave ottenendo i valori in "ordine".
tnx
Originariamente inviato da fonta.re
Fatico a seguire la tua idea. Passi le chiavi sulla lista e poi che confronto fai per ordinarla? Magari, se riesci, esemplifica.Esempio di output:codice:import java.util.*; public class Prova { public static void main(String[] args) { Map<String,Integer> map = new HashMap<String,Integer>(); map.put("Topolino", 450); map.put("Minnie", 130); map.put("Paperino", 270); map.put("Qui", 80); map.put("Gastone", 310); map.put("Quo", 30); map.put("Clarabella", 190); String[] keys = map.keySet().toArray(new String[0]); // Nessun ordine specifico for (String k : keys) { System.out.println(k + " -> " + map.get(k)); } System.out.println("---------"); Arrays.sort(keys, new MapValueKeyComparator<String,Integer>(map)); // Chiavi ordinate secondo il rispettivo valore nella map for (String k : keys) { System.out.println(k + " -> " + map.get(k)); } } } class MapValueKeyComparator<K,V extends Comparable<? super V>> implements Comparator<K> { private Map<K,V> map; public MapValueKeyComparator(Map<K,V> map) { this.map = map; } public int compare(K k1, K k2) { V v1 = map.get(k1); V v2 = map.get(k2); return v1.compareTo(v2); } }
Come vedi ho usato "pesantemente" i generics (ma anche autoboxing e foreach). La dichiarazione di MapValueComparator è un po' complessa e se non conosci bene i generics ti potrà risultare molto strana, specialmente la parte V extends Comparable<? super V>.codice:Qui -> 80 Clarabella -> 190 Gastone -> 310 Topolino -> 450 Paperino -> 270 Minnie -> 130 Quo -> 30 --------- Quo -> 30 Qui -> 80 Minnie -> 130 Clarabella -> 190 Paperino -> 270 Gastone -> 310 Topolino -> 450
Ma, fidati, è la forma più generica e ampia possibile.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
La tua proposta calza a pennello.
Grazie per la celerità e l'efficacia.