1
votes

Comment puis-je trouver une clé triée par ordre croissant dans treemap, s'il y a plus d'une valeur maximale?

J'ai une TreeMap avec des entrées comme

["aftab" = 4, "Manoj" = 5, "Rahul" = 5]

Je veux obtenir la clé avec la valeur maximale, mais s'il y a deux valeurs maximales ou plus, je veux la clé qui vient en premier sur la carte, Manoj dans ce cas. Dans Mon application, j'ai utilisé Collections.max (map.getKey ()) et il renvoie Rahul.


3 Réponses :


1
votes

Créez un comparateur qui trie les entrées par valeurs décroissantes puis comparées par clés lorsque deux valeurs sont égales

Manoj=5
Map<String, Integer> map = new TreeMap<>();
map.put("aftab", 4);
map.put("Manoj", 5);
map.put("Rahul", 5);
Entry<String, Integer> result = map.entrySet().stream()
                .sorted(Entry.<String, Integer>comparingByValue().reversed().thenComparing(Entry.comparingByKey()))
                .findFirst().orElseGet(null);

System.out.println(result);

, sortie

Entry.<String, Integer>comparingByValue().reversed()
.thenComparing(Entry.comparingByKey())


1 commentaires

cette réponse est également correcte, mais pour moi peu complexe. Et il ne devrait imprimer que "manoj".



1
votes

Créez un Comparator et transmettez-le à Collections.max().

Map<String, Integer> map = new TreeMap<>(
            Map.of("Aftab", 4, "Manoj", 5, "Rahul", 5));

Comparator<Entry<String,Integer>> comp = Entry.comparingByValue();

Entry<String,Integer> e = Collections.max(map.entrySet(),comp);

System.out.println(e);
// or
System.out.println(e.getKey());


0 commentaires

0
votes

Utilisez Collections :: max pour trouver l'entrée avec la valeur maximale de map.entrySet () en utilisant Comparator.comparingInt (Map.Entry :: getValue ) .


1 commentaires

Oui @Arvind Kumar Avinash, votre réponse est tout à fait correcte.