Jaki jest najłatwiejszy sposób na uzyskanie klucza związanego z maksymalną wartością na mapie?
Uważam, że Collections.max (someMap) zwróci klucz maksymalny, jeśli chcesz, aby klucz odpowiadał wartości maksymalnej.
Zasadniczo należałoby iterować po zestawie wpisów mapy, pamiętając zarówno „aktualnie znane maksimum”, jak i skojarzony z nim klucz. (Lub oczywiście tylko wpis zawierający oba).
Na przykład:
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
z niestandardowego komparatora byłoby prawdopodobnie prostsze.Aby uzyskać kompletność, tutaj jest java-8 sposób na zrobienie tego
lub
lub
źródło
(entry1, entry2) -> entry1.getValue() - entry2.getValue()
jest bardziej zwarty dla komparatora.countMap.entrySet().stream().max((entry1, entry2) -> Integer.compare(entry1.getValue(), entry2.getValue())).get().getKey();
Map.Entry.comparingByValue()
zamiast tegoTen kod wypisze wszystkie klucze z maksymalną wartością
źródło
Prosty jeden liner wykorzystujący Java-8
źródło
String max_key = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
Oto jak zrobić to bezpośrednio (bez wyraźnej dodatkowej pętli), definiując odpowiednie
Comparator
:źródło
Odpowiedź, która zwraca Opcjonalne, ponieważ mapa może nie mieć wartości maksymalnej, jeśli jest pusta:
map.entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey);
źródło
Java 8 sposób na uzyskanie wszystkich kluczy o maksymalnej wartości.
Możesz również zrównoleglać go, używając
parallelStream()
zamiaststream()
źródło
Mam dwie metody, używając tej metody, aby uzyskać klucz o maksymalnej wartości:
Jako przykład pobierz Entry z maksymalną wartością za pomocą metody:
Korzystając z Javy 8 możemy otrzymać obiekt zawierający maksymalną wartość:
źródło
1. Korzystanie z usługi Stream
2. Używanie Collections.max () z wyrażeniem lambda
3. Używanie Stream z odniesieniem do metody
4. Korzystanie z Collections.max ()
5. Korzystanie z prostej iteracji
źródło
Proste do zrozumienia. W poniższym kodzie maxKey jest kluczem, który utrzymuje maksymalną wartość.
źródło
Czy to rozwiązanie jest w porządku?
źródło
Element większościowy / maksymalny na mapie:
źródło
podana mapa
HashMap abc = new HashMap <> ();
pobierz wszystkie wpisy mapy z maksymalną wartością.
możesz użyć dowolnej z poniższych metod w filtrze, aby uzyskać odpowiednie wpisy mapy dla zestawów wartości minimalnych lub maksymalnych
jeśli tylko chcesz zdobyć klucze do mapy filtrów
jeśli chcesz uzyskać wartości dla przefiltrowanej mapy
jeśli chcesz mieć wszystkie takie klucze na liście:
jeśli chcesz uzyskać wszystkie takie wartości na liście:
źródło
W moim projekcie użyłem nieco zmodyfikowanej wersji rozwiązania Jona i Fathah. W przypadku wielu wpisów o tej samej wartości, zwraca ostatni znaleziony wpis:
źródło
źródło
możesz to zrobić
źródło