Was ist der einfachste Weg, um den Schlüssel mit dem Maximalwert in einer Karte zu verknüpfen?
Ich glaube, dass Collections.max (someMap) den maximalen Schlüssel zurückgibt, wenn Sie den Schlüssel möchten, der dem maximalen Wert entspricht.
Grundsätzlich müssten Sie den Eintragssatz der Karte durchlaufen und sich dabei sowohl das "derzeit bekannte Maximum" als auch den damit verbundenen Schlüssel merken. (Oder natürlich nur der Eintrag, der beides enthält.)
Beispielsweise:
Map.Entry<Foo, Bar> maxEntry = null;
for (Map.Entry<Foo, Bar> entry : map.entrySet())
{
if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0)
{
maxEntry = entry;
}
}
max
mit einem benutzerdefinierten Komparator wäre wahrscheinlich einfacher.Der Vollständigkeit halber hier ein Java-8 Art und Weise, es zu tun
oder
oder
quelle
(entry1, entry2) -> entry1.getValue() - entry2.getValue()
ist kompakter für den Komparator.countMap.entrySet().stream().max((entry1, entry2) -> Integer.compare(entry1.getValue(), entry2.getValue())).get().getKey();
Map.Entry.comparingByValue()
stattdessen verwendenDieser Code druckt alle Schlüssel mit dem Maximalwert
quelle
Ein einfacher Einzeiler mit Java-8
quelle
String max_key = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
So geht's direkt (ohne explizite zusätzliche Schleife), indem Sie das entsprechende definieren
Comparator
:quelle
Eine Antwort, die eine Option zurückgibt, da die Karte möglicherweise keinen Maximalwert hat, wenn sie leer ist:
map.entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey);
quelle
Java 8 Weg, um alle Schlüssel mit maximalem Wert zu erhalten.
Sie können es auch parallelisieren, indem Sie
parallelStream()
anstelle von verwendenstream()
quelle
Ich habe zwei Methoden, um mit dieser Methode den Schlüssel mit dem Maximalwert zu erhalten:
Als Beispiel erhalten Sie den Eintrag mit dem Maximalwert mithilfe der folgenden Methode:
Mit Java 8 können wir ein Objekt erhalten, das den Maximalwert enthält:
quelle
1. Verwenden von Stream
2. Verwenden von Collections.max () mit einem Lambda-Ausdruck
3. Verwenden von Stream mit Methodenreferenz
4. Verwenden von Collections.max ()
5. Verwenden der einfachen Iteration
quelle
Einfach zu verstehen. Im folgenden Code ist maxKey der Schlüssel, der den Maximalwert enthält.
quelle
Ist diese Lösung in Ordnung?
quelle
Mehrheitselement / Max-Element in der Karte:
quelle
gegebene Karte
HashMap abc = new HashMap <> ();
Holen Sie sich alle Karteneinträge mit maximal Werten.
Sie können eine der folgenden Methoden im Filter verwenden, um entsprechende Karteneinträge für Sätze von Minimal- oder Maximalwerten abzurufen
wenn Sie nur die Schlüssel für die Filterkarte erhalten möchten
Wenn Sie die Werte für die gefilterte Karte erhalten möchten
Wenn Sie alle diese Schlüssel in eine Liste aufnehmen möchten:
Wenn Sie alle diese Werte in einer Liste erhalten möchten:
quelle
Für mein Projekt habe ich eine leicht modifizierte Version der Lösung von Jon und Fathah verwendet. Bei mehreren Einträgen mit demselben Wert wird der zuletzt gefundene Eintrag zurückgegeben:
quelle
quelle
das kannst du so machen
quelle