J'ai donc un tas de fichiers texte dont j'ai besoin de lire et d'imprimer dans une vue textuelle. J'utilise actuellement.list() (java.io.File) pour obtenir la liste (il génère un tableau de chaînes de noms de fichiers) des fichiers dans un répertoire donné. Je parcoure ensuite le tableau et lis le contenu un par un.
Le problème est que je dois classer les fichiers par ordre alphabétique (les fichiers sont des journaux et je dois d'abord afficher le journal le plus récent - les noms de fichiers sont des horodatages - (par exemple 20220414221311) - AAAAMMJJHHMMSS).
La fonction.list semble les ordonner au hasard.
J'ai essayé de mettre les noms dans une liste, puis de les trier, mais cela n'a pas fonctionné. Quelqu'un peut-il aider?
Voici le code sans aucune commande:
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)
}
Solution du problème
Si vous avez besoin de trier votre liste par ordre alphabétique, vous pouvez utiliser les opérateurs Kotlin sortWith et compareTo. Cela devrait ressembler à :
attendancelist.sortWith { text1, text2 ->
text1.compareTo(text2, ignoreCase = true)
}
Mais si vous avez besoin d'une liste de tri en fonction de votre horodatage 'YYYYMMDDHHMMSS', je peux suggérer les étapes suivantes :
Exemple de code suivant :
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) }
}
}
Aucun commentaire:
Enregistrer un commentaire