Kotlin从2个数组中过滤最大值的方法?

我目前有2个数组,都包含5个对象。 所有对象都包含Intvariables。

样本数据:

 data class Demo(val number: Int, val name: String) val a = Demo(12, "a") val b = Demo(1, "b") val c = Demo(3, "c") val d = Demo(5, "d") val e = Demo(17, "e") val array1 = arrayOf(a,b,c,d,e) val f = Demo(3, "f") val g = Demo(8, "g") val h = Demo(15, "h") val i = Demo(16, "i") val j = Demo(22, "j") val array2 = arrayOf(f,g,h,i,j) //val array3 = ?? 

我想要做的是创建一个函数,将过滤这些数组的最大值。 现在我知道Kotlin在他们的数组max()上有一个方法,它将返回它所使用的数组的最大值。

这使我想知道(目前我正在使用嵌套的for-loop,就像Java中的某个人一样),在Kotlin中有没有一种视觉上美丽的更快/更好的方式?

使用样本数据的预期输出:

 array3[22,17,16,15,12] 

你想有两个数组中更大的int?

 (array1 + array2).sortedArrayDescending().take(5) // [22, 17, 16, 15, 12] 

编辑答案:

 (array1 + array2).sortedByDescending { it.number }.take(5) // [Demo(number=22, name=j), Demo(number=17, name=e), Demo(number=16, name=i), Demo(number=15, name=h), Demo(number=12, name=a)] 

http://try.kotlinlang.org/#/UserProjects/6eu172fogobv6na0mtafc9k9ol/klp8i0ttl32ip1q8ph3lk0s9bn

可能这将符合你的用例:

 val c = (a + b).sortedDescending().take(5).toTypedArray() 

这里, (a + b)创建一个内容为ab的数组,然后.sortedDescending()将数组从最大值排序到最小值,并将结果放入列表中。 然后你.take(5)顶部项目,然后.toTypedArray()将其转换回数组。


如果你的类Demo不是Comparable ,你可以:

  • 在该类上实现Comparable接口,使其适用于.sortedDescending()

     class Demo(...) : Comparable{ override fun compareTo(other: Demo): Int = number.compareTo(other.number) ... } 

    然后就使用上面的解决方案。

  • 使用.sortedByDescending { }指定如何比较数据:

      val c = (a + b).sortedByDescending { it.number }.take(5).toTypedArray() 
  • 如果需要通过多个值进行比较,请使用比较器链:

      val c = (a + b) .sortedWith(compareBy { it.number }.thenBy { it.name }) .takeLast(5).reversed()