Bonjour à tous,
Je souhaite trier un ListOrderMap en fonction de ses values.
j'ai écrit le lambda suivant :
et je me retrouve avec l'erreur suivante
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));
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 java.lang.ClassCastException: org.apache.commons.collections.map.ListOrderedMap$ListOrderedMapEntry cannot be cast to java.lang.Integer
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.
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));
Ma ListOrderedMap contient un Long comme clé et un enum comme value.
votre expertise est la bienvenu.
Ogtraba
Partager