Получить максимальное значение из String Map в Котлине - PullRequest
0 голосов
/ 08 октября 2019

Я использую следующий код

val maxEntries = myMap.values.max()?.let {
maxValue -> myMap.filterValues { it == maxValue }
} ?: emptyMap()

Работая для значений ниже 100, но для значений 100 и выше выбирается следующее наибольшее значение

Карта: {0=65, 1=2, 2=100, 3=1, 4=11, 5=6, 6=46, 7=31}

Макс. Значение Print1: {0=65}

Другой пример:

Карта: {0=3, 1=3, 2=3, 3=3, 4=7, 5=6}

Макс. Значение Print2: {4=7}

Iпробовал тоже так

val maxEntries = myMap.maxBy { it.value }?.value!!.toInt()

Print1: 65

Карта HashMap<String, String>

Ответы [ 2 ]

3 голосов
/ 08 октября 2019

Я думаю, вы забыли сказать, что ваши значения имеют тип String, а не Int или Long. Вот почему они сравниваются как строки (b > a и b > abcgdf, 6 > 1, то есть 6 > 10 или 6 > 1abcgfs и 65 > 100). Если вы хотите сравнить строки как числа, вам нужно преобразовать их в числа или написать компаратор. Если вы уверены, что эти строки всегда будут числами, просто используйте

myMap.maxBy { it.value.toLong() }
// or for not very big numbers:
myMap.maxBy { it.value.toInt() }

или, когда вам нужно значение Int в конце, возможно, вам следует преобразовать строки в числа перед этой операцией.

0 голосов
/ 08 октября 2019

Если вы хотите найти максимальное значение независимо от того, какой это ключ или значение, оно должно быть:

myMap.maxBy { max(it.key.toInt(), it.value.toInt()) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...