如何在Kotlin中使用Comparator与Lambda按列排序二维数组
Kotlin二维数组按指定列排序的实现
针对你需要按二维数组第3列(索引为2)排序的需求,这里提供几种Kotlin的实现方式:
方法1:复用Java的Arrays.sort API
Kotlin可以直接调用Java的Arrays.sort方法,配合Comparator实现排序,写法比Java更简洁:
// 需要导入 java.util.Arrays 和 java.util.Comparator Arrays.sort(arr, Comparator.comparingInt { it[2] })
这里用comparingInt替代Java的comparingDouble,更适配Int类型的列值,避免不必要的类型转换。
方法2:Kotlin原生原地排序
使用Kotlin自带的sortedArrayInPlace方法,直接在原数组上完成排序,更符合Kotlin风格:
arr.sortedArrayInPlace { a, b -> a[2].compareTo(b[2]) }
方法3:Kotlin原生返回新数组排序
如果不想修改原数组,可以用sortedArray返回一个新的排序后的数组:
val sortedArr = arr.sortedArray { a, b -> a[2].compareTo(b[2]) }
完整示例代码
import java.util.Arrays import java.util.Comparator fun main(){ val rows = 3 val cols = 4 val arr = Array(rows) { r -> IntArray(cols) { c -> r + ((Math.random()*9).toInt()) } } println("排序前:") for (row in arr) { println(row.contentToString()) } // 任选一种排序方式即可 Arrays.sort(arr, Comparator.comparingInt { it[2] }) // arr.sortedArrayInPlace { a, b -> a[2].compareTo(b[2]) } // val sortedArr = arr.sortedArray { a, b -> a[2].compareTo(b[2]) } println("\n排序后:") for (row in arr) { println(row.contentToString()) } }
内容的提问来源于stack exchange,提问作者JavaBoi
相关产品推荐
相关产品推荐

