Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    16

    ordinare per valore una collezione chiave-valore

    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.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: ordinare per valore una collezione chiave-valore

    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.
    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    16

    Re: Re: ordinare per valore una collezione chiave-valore

    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.
    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).

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: ordinare per valore una collezione chiave-valore

    Originariamente inviato da fonta.re
    La collezione me la posso creare a piacimento.
    Beh, ma hai già scelto? Mica posso suggerirtela io se non so esattamente cosa devi fare di preciso!

    Originariamente inviato da fonta.re
    Tenete solo presente che compilo in 1.5.
    Meglio ... puoi sfruttare i "generics" e altre feature di Java 5.

    Originariamente inviato da fonta.re
    L'unico vincolo è che abbia in chiave una Stringa e come valore un Integer
    Beh, ma allora non può che essere una "Map", cioè una associazione chiave->valore ... quale implementazione "concreta" dipende .....

    Originariamente inviato da fonta.re
    (che è il campo su cui voglio fare l'ordinamento).
    No, ordinare una map per valore non è fattibile .... non con quelle fornite nel framework.
    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.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    16

    Re: Re: Re: Re: ordinare per valore una collezione chiave-valore

    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.

    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".
    Fatico a seguire la tua idea. Passi le chiavi sulla lista e poi che confronto fai per ordinarla? Magari, se riesci, esemplifica.

    tnx

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Re: Re: ordinare per valore una collezione chiave-valore

    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.
    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);
        }
    }
    Esempio di output:

    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
    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>.
    Ma, fidati, è la forma più generica e ampia possibile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2004
    Messaggi
    16

    centro

    La tua proposta calza a pennello.

    Grazie per la celerità e l'efficacia.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.