Kotlin从2个数组中过滤最大值的方法?
我目前有2个数组,都包含5个对象。 所有对象都包含Int
variables。
样本数据:
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)
创建一个内容为a
和b
的数组,然后.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()