C'est une question très basique, je ne suis pas très doué en Java. J'ai une Map et je veux obtenir une liste ou quelque chose comme ça des clés dans un ordre trié afin de pouvoir itérer sur elles.
Réponses
Trop de publicités?Utilisez un TreeMap
qui est une mise en œuvre de l'approche SortedMap
interface. Il présente ses clés dans un ordre trié.
Map<String, Object> map = new TreeMap<String, Object>();
/* Add entries to the map in any order. */
...
/* Now, iterate over the map's contents, sorted by key. */
for (Map.Entry<String, ?> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Si vous travaillez avec une autre implémentation de Map qui n'est pas triée comme vous le souhaitez, vous pouvez la passer à la fonction Constructeur de TreeMap
pour créer une nouvelle carte avec des clés triées.
void process(Map<String, Object> original) {
Map<String, Object> copy = new TreeMap<String, Object>(original);
/* Now use "copy", which will have keys in sorted order. */
...
}
A TreeMap
fonctionne avec n'importe quel type de clé qui implémente la fonction Comparable
en les mettant dans leur ordre "naturel". Pour les clés qui ne sont pas Comparable
ou dont l'ordre naturel n'est pas celui dont vous avez besoin, vous pouvez implémenter votre propre Comparator
et le préciser dans le Constructeur .
Vous avez plusieurs possibilités. Elles sont classées par ordre de préférence :
- Utilisez un
SortedMap
:SortedMap<whatever> myNewMap = new TreeMap<whatever>(myOldMap);
C'est largement préférable si vous voulez itérer plus d'une fois. Les clés restent triées, ce qui évite d'avoir à les trier avant l'itération. - Il n'y a pas de numéro 2.
- Il n'y a pas de numéro 3, non plus.
SortedSet<whatever> keys = new TreeSet<whatever>(myMap.keySet());
List<whatever> keys = new ArrayList<whatever>(myMap.keySet()); Collections.sort(keys);
Les deux dernières vous permettront d'obtenir ce que vous voulez, mais ne devraient être utilisées que si vous ne voulez itérer qu'une seule fois et ensuite oublier le tout.