Trier une hashmap par valeur et ordre inverse
Résolu/Fermé
charline159
Messages postés
208
Date d'inscription
lundi 14 août 2017
Statut
Membre
Dernière intervention
22 juin 2022
-
3 nov. 2021 à 23:36
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - 4 nov. 2021 à 17:46
charline159 Messages postés 208 Date d'inscription lundi 14 août 2017 Statut Membre Dernière intervention 22 juin 2022 - 4 nov. 2021 à 17:46
A voir également:
- Trier une hashmap par valeur et ordre inverse
- Excel trier par ordre croissant chiffre - Guide
- Annuaire inversé - Guide
- Ecran inversé - Guide
- Annuaire inversé gratuit réponse immediate ✓ - Forum Réseaux sociaux
- Annuaire inversé suisse ✓ - Forum Mail
1 réponse
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
Modifié le 4 nov. 2021 à 09:48
Modifié le 4 nov. 2021 à 09:48
Bonjour,
A priori tes paramètres K et V ne servent à rien ici puisque tu auras toujours une Map de String et d'Integer dans ListeL.
De plus, pour récupérer le résultat de ton tri, il te faut un type de retour, void ne convient pas. Tu parles d'une ArrayList<String> mais ça n'apparaît nul part dans ton code.
Bref, tout est à revoir. Voici un exemple :
public static <K,V> void sortByFrequence(ListeL listeL){
A priori tes paramètres K et V ne servent à rien ici puisque tu auras toujours une Map de String et d'Integer dans ListeL.
De plus, pour récupérer le résultat de ton tri, il te faut un type de retour, void ne convient pas. Tu parles d'une ArrayList<String> mais ça n'apparaît nul part dans ton code.
Bref, tout est à revoir. Voici un exemple :
Map<String, Integer> map = new HashMap<>(); map.put("a", 2); map.put("b", 1); map.put("c", 3); map.put("d", 1); System.out.println(map); // {a=2, b=1, c=3, d=1} Map<Integer, Set<String>> reverseMap = map.entrySet().stream() .collect(Collectors.groupingBy(Entry::getValue, Collectors.collectingAndThen( Collectors.toSet(), entries -> entries.stream() .map(Entry::getKey) .collect(Collectors.toSet())))); System.out.println(reverseMap); // {1=[b, d], 2=[a], 3=[c]} List<String> list = reverseMap.entrySet().stream() .sorted(Comparator.comparing(Entry::getKey, Comparator.reverseOrder())) .flatMap(e -> e.getValue().stream()) .collect(Collectors.toList()); System.out.println(list); // [c, a, b, d]
Modifié le 4 nov. 2021 à 17:46
Effectivement, à la base j'avais bien mis un retour de type ArrayList<String> mais j'avais une erreur en lien avec le type générique T que je n'arrivais pas à résoudre, du coup j'ai fini par essayer de "bricoler" autre chose (méthode avec retour void, mais en parallèle mise à jour d'une arraylist créée au préalable, par exemple en attribut).
J'aurais peut-être dû utiliser une List dès le début (et pas une ArrayList), j'aurais peut-être eu moins de soucis...
du coup je viens de tester ton code, il marche parfaitement, j'ai juste fait un downcast pour stocker le return de type List en ArrayList.
Je suis restée bloquée sur ce problème un moment, merci encore à toi !