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

时间:2017-10-31 00:17:29

标签: kotlin

我无法理解如何使用 Map 界面中的maxBymaxWith方法。我有这段代码:

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

我希望获得具有最大价值的条目,但我不知道要传递给maxBymaxWith的内容。

2 个答案:

答案 0 :(得分:16)

MaxBy

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

进行比较

MaxWith

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

使用哪一个

MaxBy通常更有意义,因为它通常更快(虽然是YMMV),并且因为实现可以更简单,但如果只能通过比较对项目进行排序,那么可能需要maxWith。

如何使用

这是最高价值的条目:

var maxBy = myMap.maxBy { it.value }

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

val maxWith = myMap.maxWith(Comparator({a, b -> a.value.compareTo(b.value)}))

答案 1 :(得分:1)

创建如下所示的类

 data class Student(val name: String, val age: Int)

现在转到Oncreate

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

现在在创建中使用maxBy

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

,并且在创建时显示

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