Komparator für die Karte.Eintrag<K V>
Ich habe eine Karte mit einem enumeration-Typ als Schlüssel und Doppel als Wert. Ich möchte sozusagen das basierend auf der Double-Werte. Also ich habe den Eintrag gesetzt wird, und zu Collections.sort()
mit einem Komparator. Ich habe den folgenden code für den Komparator
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());
}
}
Bin ich immer die folgenden Fehlermeldungen
Syntax error on token ".", extends expected (line 1)
.The type parameter Map is hiding the type Map<K,V> (line 1)
.- Weil die beiden oben genannten Fehler, K und V kann nicht aufgelöst werden zu einem Typ (Linien 3,4).
Ich bin nicht in der Lage diese zu lösen. Jede Hilfe wird sehr geschätzt. Vielen Dank im Voraus.
- Nein, das funktioniert nicht. Ich bekomme ein "Der Typ ScoreComparator implementieren muss, um die geerbte abstrakte Methode Komparator<Karte.Eintrag<K V>>.vergleichen(Karte anzeigen.Eintrag<K V>, Karte.Eintrag<K V>)" - Fehler. Ich implementieren Sie die Methode wie im obigen code.
- Du hast Recht, ich bearbeitet meine Antwort FALTENBALG zu fixieren und immer noch den Komparator, so allgemein wie Sie es beabsichtigt haben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie wahrscheinlich diese:
ScoreComparator
dauert zwei generische Typ-ArgumenteK
undV
.Map.Entry<K, V>
ist keine gültige generische Typ-definition, aber Sie können es verwenden, um zu bindenComparator<T>
'sT
geben.Beachten Sie, dass
V
erweitern müssenComparable<V>
, um anrufen zu könnencompareTo()
aufo1.getValue()
.Können Sie nun die oben
ScoreComparator
als solche:Beachten, von Ihrer aktuellen Umsetzung, werden Sie wahrscheinlich brauchen noch nicht einmal den
K
parameter. Eine alternative:K
, die nicht benötigt werden in der aktuellen Implementierung...