Comment pouvons-nous trier un HashMap<key, ArrayList>
?
Je veux trier sur la base d'une valeur dans le champ ArrayList
.
Comment pouvons-nous trier un HashMap<key, ArrayList>
?
Je veux trier sur la base d'une valeur dans le champ ArrayList
.
Devez-vous utiliser un HashMap ? Si vous n'avez besoin que de l'interface Map, utilisez un TreeMap
Si vous voulez trier en comparant les valeurs dans le HashMap. Vous devez écrire du code pour faire cela, si vous voulez le faire une fois, vous pouvez trier les valeurs de votre HashMap :
Map<String, Person> people = new HashMap<>();
Person jim = new Person("Jim", 25);
Person scott = new Person("Scott", 28);
Person anna = new Person("Anna", 23);
people.put(jim.getName(), jim);
people.put(scott.getName(), scott);
people.put(anna.getName(), anna);
// not yet sorted
List<Person> peopleByAge = new ArrayList<>(people.values());
Collections.sort(peopleByAge, Comparator.comparing(Person::getAge));
for (Person p : peopleByAge) {
System.out.println(p.getName() + "\t" + p.getAge());
}
Si vous voulez accéder souvent à cette liste triée, vous pourriez insérer vos éléments dans un fichier de type HashMap<TreeSet<Person>>
bien que la sémantique des ensembles et des listes soit un peu différente.
Liste triée par clés hasmap :
SortedSet<String> keys = new TreeSet<String>(myHashMap.keySet());
Liste triée par valeurs hashmap :
SortedSet<String> values = new TreeSet<String>(myHashMap.values());
En cas de duplication des valeurs de la carte :
List<String> mapValues = new ArrayList<String>(myHashMap.values());
Collections.sort(mapValues);
Bonne chance !
http://snipplr.com/view/2789/sorting-map-keys-by-comparing-its-values/
obtenir les clés
List keys = new ArrayList(yourMap.keySet());
Les trier
Collections.sort(keys)
les imprimer.
Dans tous les cas, vous ne pouvez pas avoir de valeurs triées dans HashMap (selon l'API This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time
].
Bien que vous puissiez pousser toutes ces valeurs vers LinkedHashMap
pour une utilisation ultérieure.
On dirait que vous voulez un treemap.
http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html
Vous pouvez lui passer un comparateur personnalisé si cela s'applique.
En Java 8 :
Comparator<Entry<String, Item>> valueComparator =
(e1, e2) -> e1.getValue().getField().compareTo(e2.getValue().getField());
Map<String, Item> sortedMap =
unsortedMap.entrySet().stream().
sorted(valueComparator).
collect(Collectors.toMap(Entry::getKey, Entry::getValue,
(e1, e2) -> e1, LinkedHashMap::new));
Utilisation de Goyave :
Map<String, Item> map = ...;
Function<Item, Integer> getField = new Function<Item, Integer>() {
public Integer apply(Item item) {
return item.getField(); // the field to sort on
}
};
comparatorFunction = Functions.compose(getField, Functions.forMap(map));
comparator = Ordering.natural().onResultOf(comparatorFunction);
Map<String, Item> sortedMap = ImmutableSortedMap.copyOf(map, comparator);
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.