GOOGLE ADS

vendredi 29 avril 2022

Comment obtenir une liste de fichiers triés par ordre alphabétique dans Kotlin ?

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 :

  • Convertissez votre liste de chaînes en liste de dates.

  • Trier la liste des dates.

  • Reconvertir la liste de dates en liste de chaînes (ou utiliser la liste de dates).

  • 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

    Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

    Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...