从Kotlin的Map获取最大值的条目

Mpa*_*pac 7 kotlin

我无法理解如何使用Map接口maxBymaxWith方法.我有这个代码:

var myMap: Map<String, Int> = mutableMapOf()
// ...
var best = myMap.maxBy { ??? }
Run Code Online (Sandbox Code Playgroud)

我想得到最大值的条目,但我不知道要传递给什么maxBymaxWith.

jrt*_*ell 19

MaxBy

MaxBy将值转换为可比较的类型,并按计算值进行比较

MaxWith

MaxWith将项目相互比较,并按比较器的返回值对它们进行排序.

哪一个使用

MaxBy更有意义一般,因为它通常更快(虽然因人而异),因为实施起来也比较简单,但如果项目只能通过比较,然后进行排序,可能需要maxWith.

如何使用它

这获得了最高价值的条目:

var maxBy = myMap.maxBy { it.value }
Run Code Online (Sandbox Code Playgroud)

与maxWith相同的代码如下所示:

val maxWith = myMap.maxWith(Comparator({a, b -> a.value.compareTo(b.value)}))
Run Code Online (Sandbox Code Playgroud)

  • maxBy 已弃用,更新示例以使用 maxByOrNull 是有意义的。 (3认同)

小智 6

创建一个如下所示的类

 data class Student(val name: String, val age: Int)
Run Code Online (Sandbox Code Playgroud)

现在转到 Oncreate

 val public = listOf(Student("param",29),
            Student("nilesh", 19),
            Student("rahul", 13),
            Student("venkat", 12),
            Student("Ram", 22),
            Student("Sonam", 18))
Run Code Online (Sandbox Code Playgroud)

现在创建中的 maxBy

val maxAge=public.maxBy { p-> p.age }
    println(maxAge)
    println("Student Name: ${maxAge?.name}" )
    println("Student Age: ${maxAge?.age}" )
Run Code Online (Sandbox Code Playgroud)

以及 Create 中的 minBy

val minAge = public.minBy { p->p.age }
    println(minAge)
    println("Student Name: ${minAge?.name}" )
    println("Student Age: ${minAge?.age}" )
Run Code Online (Sandbox Code Playgroud)