如何在 Kotlin 中获取按字母顺序排序的文件列表?

How to get an alphabetically sorted list of files in Kotlin?

所以我有一堆文本文件,其中的内容需要阅读并打印到文本视图中。我目前正在使用 .list() (java.io.File) 来获取给定目录中文件的列表(它输出一个文件名字符串数组)。然后我遍历数组并逐一读取内容。

问题是,我需要按字母顺序降序排列文件(文件是日志,我需要首先显示最新的日志 - 文件名是时间戳 -(例如 20220414221311)- YYYYMMDDHHMMSS)。

.list 函数似乎是随机排序的。

我试过将名字放在一个列表中,然后对其进行排序,但没有成功。有人可以帮忙吗?

这是没有任何顺序的代码:

    fun ui() {

    setContentView(R.layout.activity_main)

    val dir = getExternalFilesDir(null);
    val attendancedir = File("$dir/attendance")
    var attendancelist = attendancedir.list()

    val scroll = findViewById<View>(R.id.SCROLL) as LinearLayout

    for (attendancefile in attendancelist) {

        val attendancedisplay = File("$dir/attendance/$attendancefile")

        val tv = TextView(this)
        tv.text = attendancedisplay.readText()
        scroll.addView(tv)
        }

如果您需要按字母顺序对列表进行排序,可以使用 Kotlin 运算符 sortWith 和 compareTo。它应该看起来像:

attendancelist.sortWith { text1, text2 -> 
    text1.compareTo(text2, ignoreCase = true) 
}

但如果您需要根据时间戳对列表进行排序 'YYYYMMDDHHMMSS',我可以建议您采取后续步骤:

  1. 将您的字符串列表转换为日期列表。
  2. 排序日期列表。
  3. 将日期列表转换回字符串列表(或操作日期列表)。

下一个代码示例:

private val sdf = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault())
private fun ui() {
    val dir = getExternalFilesDir(null);
    val attendancedir = File("$dir/attendance")
    val attendancelist = attendancedir.list()
    val sortedList = getSortedList(attendancelist)

    // do operations with sortedList
}

private fun getSortedList(attendancelist: Array<out String>):  List<String?> {
    return attendancelist.map { text -> // convert your string list to date list
        sdf.parse(text)
    }.sortedWith { date1, date2 -> // sort date list
        date1.compareTo(date2)
    }.map { date -> // convert date list back to string list
        date?.let { sdf.format(it) }
    }
}