Bonjour à tous,

Je souhaite trier un ListOrderMap en fonction de ses values.

j'ai écrit le lambda suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
list =  list.entrySet().stream().sorted(Entry.comparingByValue())
	     .collect(Collectors.toMap(list::get,list::getValue,
                                               (e1, e2) -> e1, ListOrderedMap::new));
et je me retrouve avec l'erreur suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
java.lang.ClassCastException: org.apache.commons.collections.map.ListOrderedMap$ListOrderedMapEntry cannot be cast to java.lang.Integer
Avant d'utiliser un listOrderedMap, j'avais une LinkedHashMap et je faisais ceci qui fonctionné très bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
alist = alist.entrySet().stream()
               .sorted(Entry.comparingByValue())
               .collect(Collectors.toMap(Entry::getKey, Entry::getValue, 
                                                  (e1, e2) -> e1,
                                                  LinkedHashMap<Long, JOB>::new));
J'ai constater que le problème venait de l'exécution du .collect(). Je ne sais pas vraiment ce qui ne fonctionne pas. Je sais que dans le cas de la ListOrderedMap la fonction entrySet retourne un Set et non un Set<Map.Entry<K,V>> comme pour la LinkedHashMap. Du coup j'ai utilisé list::get et list::getValue au lieu de Entry::getKey et Entry::getValue. Je suppose que le soucis vient de là. Mais je ne sais pas comment faire autrement.
Ma ListOrderedMap contient un Long comme clé et un enum comme value.

votre expertise est la bienvenu.

Ogtraba