comparateur pour Carte.Entrée<K,V>
J'ai une Carte avec un type d'énumération que la clé et le Double de la valeur. Je veux ceci, sur la base des valeurs Double. J'ai donc eu l'entrée de la valeur et que vous voulez utiliser Collections.sort()
avec un comparateur. J'ai le code suivant pour le comparateur
class ScoreComparator<Map.Entry<K, V>> implements Comparator<Map.Entry<K, V>> {
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}
Je reçois des messages d'erreur suivants
Syntax error on token ".", extends expected (line 1)
.The type parameter Map is hiding the type Map<K,V> (line 1)
.- À cause de deux erreurs, K et V ne peut pas être résolu à un type (lignes 3,4).
Je ne suis pas en mesure de résoudre ce problème. Toute aide est très appréciée. Merci à l'avance.
- Non cela ne fonctionne pas. "Le type ScoreComparator doit mettre en œuvre les hérité de la méthode abstraite Comparateur de<Map.Entrée<K,V>>.comparer(à la Carte.Entrée<K,V>, Carte.Entrée<K,V>)" erreur. - Je mettre en œuvre la méthode comme indiqué dans le code ci-dessus.
- Vous avez raison, j'ai édité ma réponse soufflet de corriger cela et de toujours garder le comparateur aussi générique que vous a destiné.
Vous devez vous connecter pour publier un commentaire.
Vous voulez probablement à ceci:
ScoreComparator
prend deux génériques des arguments de typeK
etV
.Map.Entry<K, V>
n'est pas valide générique de la définition de type, mais vous pouvez très bien l'utiliser pour se lier àComparator<T>
'sT
type.Noter que
V
doit s'étendreComparable<V>
, afin d'être en mesure d'appelercompareTo()
suro1.getValue()
.Vous pouvez maintenant utiliser le ci-dessus
ScoreComparator
en tant que tel:Remarque, à partir de votre application, vous n'avez probablement même pas besoin de la
K
paramètre. Une alternative:K
, ce qui n'est pas nécessaire dans la mise en œuvre actuelle...