J'ai une liste d'entrées de cartes
Map<String, Integer> map = new HashMap<>();
...(fill the map)...
List<Entry<String, Integer>> entries = new ArrayList<>(map.entrySet());
et je veux le trier par valeurs en fonction de cette réponse mais dans l'ordre inverse. Quand je fais
Comparator<Entry<String, Integer>> cmp = Entry.comparingByValue();
entries.sort(cmp.reversed());
tout fonctionne bien. Mais lorsque j'essaie de raccourcir les deux lignes ci-dessus en
entries.sort(Entry.comparingByValue().reversed());
le compilateur retourne
error: incompatible types: Comparator<Entry<Object,V>> cannot be converted to Comparator<? super Entry<String,Integer>>
entries.sort(Entry.comparingByValue().reversed());
where V is a type-variable:
V extends Comparable<? super V>
Cela semble étrange parce que l'implémentation de la fonction reversed()
La méthode par défaut le transfère simplement à Collections.reverseOrder()
et je peux changer la ligne ci-dessus en
entries.sort(Collections.reverseOrder(Entry.comparingByValue()));
pour travailler. Mais quel est le bon type de Entry.comparingByValue().reversed()
?
Comparator<Entry<String, Integer>> cmp = Entry.comparingByValue().reversed();
ne semble pas fonctionner. Omettre le paramètre de type Entry<String, Integer>
fonctionne, mais cela entraîne un avertissement du compilateur "unchecked method invocation" par la suite.